码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树。。。。

时间:2016-03-11 23:52:27      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

复习下二叉树,创建二叉树,分别以先序,中序,后续三种遍历访问二叉树,输出二叉树的叶子节点及叶子节点的个数,并输出二叉树的高度

 

[cpp] view plain copy
 
  1. #include<iostream>  
  2. #include<cstdio>  
  3. #include<cstring>  
  4. #include<cstdlib>  
  5. using namespace std;  
  6. typedef struct BiTNode  
  7. {     
  8.     char data;  
  9.     struct BiTNode *lchild,*rchild;  
  10. }BiTNode,*BiTree;  
  11. int Max(int x,int y)  
  12. {  
  13.     return x>y?x:y;  
  14. }  
  15. void Create(BiTree &T)  //先序建一颗二叉树  
  16. {  
  17.     char ch;  
  18.     scanf("%c",&ch);  
  19.     if(ch==‘#‘)  
  20.     T=NULL;  
  21.     else  
  22.     {  
  23.         T=(BiTNode *)malloc(sizeof(BiTNode));  
  24.         T->data=ch;  
  25.         Create(T->lchild);  
  26.         Create(T->rchild);  
  27.     }  
  28. }  
  29. void Preorder(BiTree &root)  //先序遍历打印二叉树  
  30. {  
  31.     if(root!=NULL)  
  32.     {  
  33.         printf("%c ",root->data);  
  34.         Preorder(root->lchild);  
  35.         Preorder(root->rchild);  
  36.     }  
  37. }  
  38. void Inorder(BiTree &root)  //中序遍历打印二叉树  
  39. {  
  40.     if(root!=NULL)  
  41.     {  
  42.         Inorder(root->lchild);  
  43.         printf("%c ",root->data);  
  44.         Inorder(root->rchild);  
  45.     }  
  46. }  
  47. void Postorder(BiTree &root)  //后续遍历打印二叉树  
  48. {  
  49.     if(root!=NULL)  
  50.     {  
  51.         Postorder(root->lchild);  
  52.         Postorder(root->rchild);  
  53.         printf("%c ",root->data);  
  54.     }  
  55. }  
  56. void Preorderleaf(BiTree &root) //先序遍历输出叶子节点  
  57. {  
  58.     if(root!=NULL)  
  59.     {  
  60.         if(root->lchild==NULL&&root->rchild==NULL)  
  61.         printf("%c ",root->data);  
  62.         Preorderleaf(root->lchild);  
  63.         Preorderleaf(root->rchild);  
  64.     }  
  65. }  
  66. int LeafCount(BiTree &root)  //统计叶子节点的个数  
  67. {  
  68.     int leaf;  
  69.     if(root==NULL)  
  70.     leaf=0;  
  71.     else if(root->lchild==NULL&&root->rchild==NULL)  
  72.     leaf=1;  
  73.     else   
  74.     leaf=LeafCount(root->lchild)+LeafCount(root->rchild);  
  75.     return leaf;  
  76. }  
  77. int PostTreeDepth(BiTree &root)  //统计树的高度  
  78. {  
  79.     int hl,hr,max;  
  80.     if(root!=NULL)  
  81.     {  
  82.         hl=PostTreeDepth(root->lchild);  
  83.         hr=PostTreeDepth(root->rchild);  
  84.         max=Max(hl,hr);  
  85.         return max+1;  
  86.     }  
  87.     else   
  88.     return 0;  
  89. }  
  90. void dowork()  
  91. {  
  92.     BiTree cam;  
  93.     Create(cam);  
  94.     Preorder(cam);  
  95.     printf("\n");  
  96.     Inorder(cam);  
  97.     printf("\n");  
  98.     Postorder(cam);  
  99.     printf("\n");  
  100.     printf("叶子节点:");  
  101.     Preorderleaf(cam);  
  102.     printf("\n");  
  103.     printf("叶子节点的个数为:%d\n",LeafCount(cam));  
  104.     printf("树的深度为:%d\n",PostTreeDepth(cam));  
  105. }  
  106. int main()  
  107. {  
  108.     dowork();  
  109.     return 0;  
  110. }  
技术分享

 

 
1

二叉树。。。。

标签:

原文地址:http://www.cnblogs.com/myhome-1/p/5267591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!