二叉树(三)求二叉树的深度

采用先序法建立一棵二叉树,设计求该二叉树的深度,二叉树的数据域类型为字符型,扩展二叉树的叶子结点用‘#’表示,要求可以求多棵二叉树的深度,当二叉树的深度为0时程序结束。

输入描述:

循环输入多棵扩展二叉树的先序遍历序列,每棵树占一行,以回车结束,每棵二叉树中结点之间以空格隔开

输出描述:

输出各二叉树的深度,每次输出后面都换行

输入样例:

A B # # C D # E # F # # G H # I K # # # #
A B D H # # I # # E J # # K # # C F L # # M # # G N # # O # #
#

输出样例:

6
4
0
#include<iostream>    
using namespace std;
#include<cstdlib>
int x;
struct Node  
{  
   char data;  
   Node *Lchild,*Rchild;  
};  
  
  
class BiTree  
{  
public:  
   BiTree(){root=Create(root);}
   ~BiTree(){Release(root);} 
   void Preorder(){Preorder(root);}
   void Inorder(){Inorder(root);} 
   void Postorder(){Postorder(root);}
   int treeHeight1(){treeHeight1(root);}
   void Leverorder();
   private:  
   Node *root;    
   Node *Create(Node *bt); 
   void Release(Node *bt);  
   void Preorder(Node *bt); 
   void Inorder(Node *bt);  
   void Postorder(Node *bt);   
   void PrintParent(Node *bt);   
   void print(Node *bt);  
   void print_family(Node *bt); 
   int treeHeight1(Node *bt){
  if(bt==NULL){
    return 0;
  }
  if(root==NULL){
   x=0;
  } 
  int leftHeight = treeHeight1(bt->Lchild)+1;
  int rightHeight = treeHeight1(bt->Rchild)+1;
  x=leftHeight>rightHeight ? leftHeight :rightHeight;
  return leftHeight>rightHeight ? leftHeight :rightHeight;
}
};  

Node*BiTree::Create(Node *bt)  
{  
  char s;  
  cin>>s;  
  if(s=='#')  
     bt=NULL;  
  else{  
     bt=new Node;  
     bt->data=s;  
     bt->Lchild=Create(bt->Lchild);  
     bt->Rchild=Create(bt->Rchild);  
   }  
  return bt;  
}  
  
void BiTree::Release(Node *bt)  
{  
   if(bt!=NULL){  
     Release(bt->Lchild);  
     Release(bt->Rchild);  
     delete bt;  
   }  
}  
  
void BiTree::Preorder(Node *bt)  
{  
   if(bt==NULL) return;  
   else{  
   cout<<bt->data<<"  ";  
   Preorder(bt->Lchild);  
   Preorder(bt->Rchild);  
   }  
}  
  
void BiTree::Inorder(Node *bt)  
{  
   if(bt==NULL)  
      return;  
   else{  
     Inorder(bt->Lchild);  
     cout<<bt->data<<"  ";  
     Inorder(bt->Rchild);  
   }  
}  
  
void BiTree::Postorder(Node *bt)  
{  
  if(bt==NULL)  
     return;  
  else{  
      Postorder(bt->Lchild);  
      Postorder(bt->Rchild);  
      cout<<bt->data<<"  ";  
  }  
}  
  
void BiTree::Leverorder()  
{  
  Node *Q[100];  
  int front,rear;  
  front=rear=-1;  
  if(root==NULL)  
     return;  
  Q[++rear]=root;  
  while(front!=rear)  
  {  
     Node *q;  
     q=Q[++front];  
     cout<<q->data<<"  ";  
     if(q->Lchild!=NULL)  
        Q[++rear]=q->Lchild;  
     if(q->Rchild!=NULL)  
        Q[++rear]=q->Rchild;  
  }  
}  
int main()  
{  
while(1){
 x=0;
 BiTree one;
  one.treeHeight1(); 
  
  cout<<x<<endl;
  if(x==0)exit(0);
 
}
return 0;
}  

 

猜你喜欢

转载自blog.csdn.net/wfy2695766757/article/details/84777387
今日推荐