当前位置:   article > 正文

二叉树的先序遍历和逆先序遍历输出_二叉链表遍历的打印输出

二叉链表遍历的打印输出

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、题目

二叉树bt:A(B(D,E(G,H)),C(,F(I)))

构造先序线索二叉树tb

A B D E G H C F I

输出逆先序二叉树tb

I F C H G E D B A

二、解答

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define MaxSize 100
  4. typedef char ElemType;
  5. typedef struct tnode
  6. {
  7. ElemType data; //数据域
  8. struct tnode* lchild, * rchild; //指针域
  9. } BTNode;
  10. void CreateBTree(BTNode*& bt, char* str)
  11. {
  12. BTNode* St[MaxSize], * p = NULL;
  13. int top = -1, k, j = 0;
  14. char ch;
  15. bt = NULL; //建立的二叉树初始时为空
  16. ch = str[j];
  17. while (ch != '\0') //str未扫描完时循环
  18. {
  19. switch (ch)
  20. {
  21. case '(':top++; St[top] = p; k = 1; break; //为左孩子结点
  22. case ')':top--; break;
  23. case ',':k = 2; break; //为右孩子结点
  24. default:p = (BTNode*)malloc(sizeof(BTNode));
  25. p->data = ch; p->lchild = p->rchild = NULL;
  26. if (bt == NULL) //*p为二叉树的根结点
  27. bt = p;
  28. else //已建立二叉树根结点
  29. {
  30. switch (k)
  31. {
  32. case 1:St[top]->lchild = p; break;
  33. case 2:St[top]->rchild = p; break;
  34. }
  35. }
  36. }
  37. j++;
  38. ch = str[j];
  39. }
  40. }
  41. void PreOrder(BTNode* bt)
  42. {
  43. if (bt != NULL)
  44. {
  45. printf("%c ", bt->data);
  46. PreOrder(bt->lchild);
  47. PreOrder(bt->rchild);
  48. }
  49. }
  50. void PreOrder1(BTNode* bt) // 逆先序遍历
  51. {
  52. if (bt != NULL)
  53. {
  54. PreOrder1(bt->rchild);
  55. PreOrder1(bt->lchild);
  56. printf("%c ", bt->data);
  57. }
  58. }
  59. void DestroyBTree(BTNode*& bt)
  60. {
  61. if (bt != NULL)
  62. {
  63. DestroyBTree(bt->lchild);
  64. DestroyBTree(bt->rchild);
  65. free(bt);
  66. }
  67. }
  68. void DispBTree(BTNode* bt)
  69. {
  70. if (bt != NULL)
  71. {
  72. printf("%c", bt->data);
  73. if (bt->lchild != NULL || bt->rchild != NULL)
  74. {
  75. printf("("); //有子树时输入'('
  76. DispBTree(bt->lchild); //递归处理左子树
  77. if (bt->rchild != NULL) //有右子树时输入'.'
  78. printf(",");
  79. DispBTree(bt->rchild); //递归处理右子树
  80. printf(")"); //子树输出完毕,再输入一个')'
  81. }
  82. }
  83. }
  84. int main()
  85. {
  86. BTNode* bt;
  87. char str[] = "A(B(D,E(G,H)),C(,F(I)))";
  88. CreateBTree(bt, str);
  89. printf("二叉树bt:"); DispBTree(bt); printf("\n");
  90. printf("构造先序线索二叉树tb\n");
  91. PreOrder(bt);
  92. printf("\n");
  93. printf("输出逆先序二叉树tb\n");
  94. PreOrder1(bt);
  95. printf("\n");
  96. return 0;
  97. }



总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了二叉树广义表的使用,提供了大量能使我们快速便捷地处理数据的函数和方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/569977
推荐阅读
相关标签
  

闽ICP备14008679号