C++二叉树的建立与遍历

从别处找来几个例子,感觉还可以,同学们拿回去看看吧,有什么地方不懂可以下可以后来实验室问我。
  1. //==========================================定义头部  
  2. #include <iostream>  
  3. using namespace std;  
  4. struct BiTNode{  
  5.  char data;  
  6.  struct BiTNode *lchild, *rchild;//左右孩子  
  7. };  
  8. BiTNode*T;  
  9. void CreateBiTree(BiTNode* &T);  
  10. void Inorder(BiTNode* &T);  
  11. void PreOrderTraverse(BiTNode* &T);  
  12. void Posorder(BiTNode* &T);  
  13. //===========================================主函数  
  14. int main(){  
  15. cout<<"创建一颗树,其中A->Z字符代表树的数据,用“#”表示空树:"<<endl;  
  16.   CreateBiTree(T);  
  17. cout<<"先序递归遍历:"<<endl;  
  18. PreOrderTraverse(T);  
  19. cout<<endl;  
  20. cout<<"中序递归遍历:"<<endl;  
  21.   Inorder(T);  
  22. cout<<endl;  
  23. cout<<"后序递归遍历:"<<endl;  
  24.         Posorder(T);  
  25. cout<<endl;  
  26.   return 1;}  
  27. //=============================================先序递归创建二叉树树  
  28. void CreateBiTree(BiTNode* &T){  
  29.  //按先序输入二叉树中结点的值(一个字符),空格字符代表空树,  
  30.  //构造二叉树表表示二叉树T。  
  31.  char ch;  
  32.  if((ch=getchar())=='#')T=NULL;//其中getchar()为逐个读入标准库函数  
  33.  else{  
  34.   T=new BiTNode;//产生新的子树  
  35.   T->data=ch;//由getchar()逐个读入来  
  36.   CreateBiTree(T->lchild);//递归创建左子树  
  37.   CreateBiTree(T->rchild);//递归创建右子树  
  38.  }  
  39. }//CreateTree  
  40. //===============================================先序递归遍历二叉树  
  41. void PreOrderTraverse(BiTNode* &T){  
  42.  //先序递归遍历二叉树  
  43.  if(T){//当结点不为空的时候执行  
  44.   cout<<T->data;  
  45.   PreOrderTraverse(T->lchild);//  
  46.   PreOrderTraverse(T->rchild);  
  47.  }  
  48.  else cout<<"";  
  49. }//PreOrderTraverse  
  50. //================================================中序遍历二叉树  
  51. void Inorder(BiTNode* &T){//中序递归遍历二叉树  
  52.  if(T){//bt=null退层  
  53.   Inorder(T->lchild);//中序遍历左子树  
  54.   cout<<T->data;//访问参数  
  55.   Inorder(T->rchild);//中序遍历右子树  
  56.  }  
  57.  else cout<<"";  
  58.  }//Inorder  
  59. //=================================================后序递归遍历二叉树  
  60. void Posorder(BiTNode* &T){  
  61.  if(T){  
  62.   Posorder(T->lchild);//后序递归遍历左子树  
  63.   Posorder(T->rchild);//后序递归遍历右子树  
  64.   cout<<T->data;//访问根结点  
  65.  }  
  66.  else cout<<"";  
  67. }  
  68. //================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值