实验五:树和二叉树的实验2

使用二叉树的链式存储结构,创建一棵二叉树,进行前序、中序以及后序遍历,同时求得二叉树的结点个数以及叶子结点个数。

程序源代码:

# ifndef Bitree_H

# define Bitree_H

struct BiNode

{

char data;

BiNode *lchild,*rchild;

};

class Bitree

{

public:

  Bitree(){root=Creat(root);}

  ~Bitree(){Release(root);}

  void PreOrder(){PreOrder(root);}

  void InOrder(){InOrder(root);}

  void PostOrder(){PostOrder(root);}

  void Count(){Count(root);}

  void CountLeaf(){CountLeaf(root);}

  private:

  BiNode *root;

  BiNode *Creat(BiNode *bt);

  void Release(BiNode  *bt);

  void PreOrder(BiNode *bt);

  void InOrder(BiNode *bt);

  void PostOrder(BiNode *bt);

  void Count(BiNode *bt);

  void CountLeaf(BiNode *bt);

};

# endif

# include<iostream>

using namespace std;

# include"Bitree.h"

int count=0;

BiNode *Bitree::Creat(BiNode *bt)

{

char ch;

cout<<"请输入创建一棵二叉树的结点数据"<<endl;

cin>>ch;

if(ch=='#') return NULL;

    else

{

bt=new BiNode;

bt->data=ch;

bt->lchild=Creat(bt->lchild);

bt->rchild=Creat(bt->rchild);

}

return bt;

}

void Bitree::Release(BiNode *bt)

{

if(bt!=NULL)

{

Release(bt->lchild);

    Release(bt->rchild);

    delete bt;

}

}

void Bitree::PreOrder(BiNode *bt)

{

if(bt==NULL) return;

else

{

cout<<bt->data<<" ";

PreOrder(bt->lchild);

PreOrder(bt->rchild);

}

}

void Bitree::InOrder(BiNode *bt)

{

if(bt==NULL) return;

else

{

InOrder(bt->lchild);

cout<<bt->data<<" ";

InOrder(bt->rchild);

}

}

void Bitree::PostOrder(BiNode *bt)

{

if(bt==NULL) return;

else

{

PostOrder(bt->lchild);

PostOrder(bt->rchild);

cout<<bt->data<<" ";

}

}

void Bitree::Count(BiNode *bt)

{

if(bt!=NULL)

{

Count(bt->lchild);

count++;

Count(bt->rchild);

cout<<count<<endl;

}

};

void Bitree::CountLeaf(BiNode *bt)

{

if(bt->lchild==NULL&&bt->rchild==NULL)

{

count++;

CountLeaf(bt->lchild);

CountLeaf(bt->rchild);

}

cout<<count;

}

# include<iostream>

using namespace std;

# include"Bitree.h"

int main()

{

Bitree T;

cout<<"————前序遍历————"<<endl;

T.PreOrder();

cout<<endl;

cout<<"————中序遍历————"<<endl;

T.InOrder();

cout<<endl;

cout<<"————后序遍历————"<<endl;

T.PostOrder();

cout<<endl;

cout<<"————结点数————"<<endl;

T.Count();

cout<<endl;

cout<<"————叶子结点数————"<<endl;

T.CountLeaf();

cout<<endl;

return 0;

}

程序结果:


猜你喜欢

转载自blog.csdn.net/LIU_JY_/article/details/80383659
今日推荐