当前位置:   article > 正文

二叉树的建立和遍历

二叉树的建立和遍历

建立以二叉链作为存储结构的二叉树,实现 1)先序遍历; 2)中序遍历; 3)后序遍历; 4)编程计算二叉树的叶子结点个数。

输入描述:
按照先序遍历序列输入二叉树中数据元素的值,没有的输入0表示。
输出描述:
第一行输出先序遍历序列 第二行输出中序遍历序列 第三行输出后序遍历序列 第四行输出叶子结点的个数。
输入样例#:
A B C 0 0 0 D E 0 F 0 0 G 0 0
输出样例#:
A B C D E F G 
C B A E F D G 
C B F E G D A 
3
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct BiNode{
  4. char data;
  5. struct BiNode *lchild;
  6. struct BiNode *rchild;
  7. }*Bitree;
  8. int create(Bitree &L);
  9. void visit(Bitree L);
  10. void Preorder(Bitree L); //先序遍历
  11. void Inorder(Bitree L); //中序遍历
  12. void Postorder(Bitree L); //后序遍历
  13. void find(Bitree L,int &sum); //查找叶子结点
  14. int main(){
  15. Bitree L;
  16. create(L);
  17. Preorder(L);
  18. printf("\n");
  19. Inorder(L);
  20. printf("\n");
  21. Postorder(L);
  22. printf("\n");
  23. int sum=0;
  24. find(L,sum);
  25. printf("%d",sum);
  26. return 0;
  27. }
  28. int create(Bitree &L){ //先序遍历生成树
  29. char e;
  30. scanf("%c",&e);
  31. getchar();
  32. if(e=='0') L=NULL;
  33. else {
  34. L=(Bitree )malloc(sizeof(Bitree));
  35. L->data=e;
  36. create(L->lchild);
  37. create(L->rchild);
  38. }
  39. return 1;
  40. }
  41. void visit(Bitree L){ //输出
  42. printf("%c ",L->data);
  43. }
  44. void Preorder(Bitree L) //先序遍历
  45. {
  46. if(L!=NULL)
  47. {
  48. visit(L);
  49. Preorder(L->lchild);
  50. Preorder(L->rchild);
  51. }
  52. }
  53. void Inorder(Bitree L){ //中序遍历
  54. if(L!=NULL)
  55. {
  56. Inorder(L->lchild);
  57. visit(L);
  58. Inorder(L->rchild);
  59. }
  60. }
  61. void Postorder(Bitree L){ //后序遍历
  62. if(L!=NULL){
  63. Postorder(L->lchild);
  64. Postorder(L->rchild);
  65. visit(L);
  66. }
  67. }
  68. void find(Bitree L,int &sum) //查找叶子结点
  69. {
  70. if(L!=NULL)
  71. {
  72. if(L->lchild==NULL&&L->rchild==NULL)
  73. sum++;
  74. find(L->lchild,sum);
  75. find(L->rchild,sum);
  76. }
  77. }
  78. void order(Bitree L)//二叉树层次遍历
  79. {
  80. Bitree queue[7];
  81. int front=0,rear=0;
  82. queue[rear]=L;
  83. rear++;
  84. while(front!=rear)
  85. {
  86. visit(queue[front]);
  87. if(queue[front]->lchild!=NULL)
  88. {
  89. queue[rear]=queue[front]->lchild;
  90. rear++;
  91. }
  92. if(queue[front]->rchild!=NULL)
  93. {
  94. queue[rear]=queue[front]->rchild;
  95. rear++;
  96. }
  97. front++;
  98. }
  99. }

运行结果:

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号