分享

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

 strangedbly 2015-04-30
  从别处找来几个例子,感觉还可以,同学们拿回去看看吧,有什么地方不懂可以下可以后来实验室问我。
  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. //=================================================  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多