1. #include <iostream>
  2. using namespace std;
  3. struct A
  4. {
  5. char data;
  6. struct A *lchild;
  7. struct A *rchild;
  8. int ltag=0, rtag=0;
  9. };
  10. typedef A *PA;
  11. void InThreading(PA &p, PA &pre);
  12. void InOrderThreading(PA &Thr, PA &T);
  13. void InOrderTranverse(PA &Thr);
  14. void init(PA &T);
  15. int main()
  16. {
  17. PA Thr,T;
  18. init(T);
  19. InOrderThreading(Thr,T);
  20. InOrderTranverse(Thr);
  21. cout<<endl;
  22. system("pause");
  23. return 0;
  24. }
  25. void init(PA &T)
  26. {
  27. char a;
  28. cin.get(a);
  29. if (a == ' ')
  30. {
  31. T = NULL;
  32. }
  33. else
  34. {
  35. T = new A;
  36. T->data = a;
  37. init(T->lchild);
  38. init(T->rchild);
  39. }
  40. }
  41. void InOrderThreading(PA &Thr, PA &T)
  42. {
  43. Thr = new A;
  44. Thr->rchild = Thr;
  45. PA pre;
  46. Thr->ltag = 0;
  47. if (!T)
  48. Thr->lchild = Thr;
  49. else
  50. {
  51. Thr->lchild = T;
  52. pre = Thr;
  53. InThreading(T, pre);
  54. Thr->rchild = pre;
  55. Thr->rtag = 1;
  56. pre->rchild = Thr;
  57. pre->rtag = 1;
  58. }
  59. }
  60. void InThreading(PA &p, PA &pre)
  61. {
  62. if (p)
  63. {
  64. InThreading(p->lchild, pre);
  65. if (!p->lchild)
  66. {
  67. p->lchild = pre;
  68. p->ltag = 1;
  69. }
  70. if (!pre->rchild)
  71. {
  72. pre->rchild = p;
  73. pre->rtag = 1;
  74. }
  75. pre = p;
  76. InThreading(p->rchild, pre);
  77. }
  78. }
  79. void InOrderTranverse(PA &Thr)
  80. {
  81. PA p = Thr->lchild;
  82. while (p != Thr)
  83. {
  84. while (p->ltag == 0)
  85. p = p->lchild;
  86. cout << p->data << " ";
  87. while (p->rtag == 1 && p->rchild != Thr)
  88. {
  89. p = p->rchild;
  90. cout << p->data << " ";
  91. }
  92. p = p->rchild;
  93. }
  94. }
点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论