1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef char ElemType;
  5. typedef enum{Link,Thread} PointerTag; //Link为1,表示连接左孩子;Thread为0,表示连接前继项;
  6.  
  7. //创建二叉树的结点;
  8. typedef struct BiThrNode
  9. {
  10. ElemType data;
  11. BiThrNode *lchild, *rchild;
  12. PointerTag ltag;
  13. PointerTag rtag;
  14. }BiThrNode, *BiThrTree;
  15.  
  16. BiThrTree pre; //设置一个全局变量,用来存储前继结点的信息;
  17.  
  18. //创建二叉树,遵循前序遍历;
  19. int CreatBiThrTree(BiThrTree *T)
  20. {
  21. char c;
  22. scanf_s("%c", &c);
  23. if (' ' == c)
  24. {
  25. *T = NULL;
  26. }
  27. else
  28. {
  29. *T = (BiThrNode *)malloc(sizeof(BiThrNode));
  30. (*T)->data = c;
  31. (*T)->ltag = Link;
  32. (*T)->rtag = Link;
  33. CreatBiThrTree(&(*T)->lchild); //采用递归,初始化左孩子,下同;
  34. CreatBiThrTree(&(*T)->rchild);
  35. }
  36. return ;
  37. }
  38.  
  39. //创建二叉树线索函数,遵循中序遍历;
  40. int BiThreading(BiThrTree T)
  41. {
  42. if (T)
  43. {
  44. BiThreading(T->lchild);
  45. if (!T->lchild)
  46. {
  47. T->ltag = Thread;
  48. T->lchild = pre;
  49. }
  50. if (!pre->rchild)
  51. {
  52. pre->rtag = Thread;
  53. pre->rchild = T;
  54. }
  55. pre = T;
  56. BiThreading(T->rchild);
  57. }
  58. return ;
  59. }
  60.  
  61. //创建头结点;
  62. int in_Threading(BiThrTree T, BiThrTree *p)
  63. {
  64. (*p) = (BiThrNode *)malloc(sizeof(BiThrNode));
  65. (*p)->ltag = Link;
  66. (*p)->rtag = Thread;
  67. (*p)->rchild = *p;
  68. if (!T)
  69. {
  70. (*p)->lchild = *p;
  71. }
  72. else
  73. {
  74. (*p)->lchild = T;
  75. pre = *p; //将创建的头结点p赋给pre;
  76. BiThreading(T);
  77. pre->rtag = Thread; //进行收尾工作,形成一个类似于闭合的双向链表;
  78. pre->rchild = *p;
  79. (*p)->rchild = pre;
  80. }
  81. return ;
  82. }
  83.  
  84. //递归方法,二叉树前序遍历;
  85. int Pre_Order_Traverse(BiThrTree T, int level)
  86. {
  87. printf("递归前序遍历的结果为:\n");
  88. if (!T)
  89. {
  90. return ;
  91. }
  92. else
  93. {
  94. printf("第%d层:%c", level, T->data);
  95. Pre_Order_Traverse(T->lchild, level + ); //递归遍历左孩子,下同;
  96. Pre_Order_Traverse(T->rchild, level + );
  97. }
  98. return ;
  99. }
  100.  
  101. //非递归的方法,二叉树中序遍历,二叉树已存在头结点和线索;
  102. int In_Order_Traverse(BiThrTree T)
  103. {
  104. if (T)
  105. {
  106. BiThrTree P;
  107. P = T->lchild;
  108. while (P != T)
  109. {
  110. while (P->ltag == Link)
  111. {
  112. P= P->lchild;
  113. }
  114. printf("%c/n", P->data);
  115. while (P->rtag == Thread&&P->rchild != T)
  116. {
  117. P = P->rchild;
  118. printf("%c/n", P->data);
  119. }
  120. P = P->rchild;
  121. }
  122. }
  123. return ;
  124. }
  125.  
  126. //主函数部分;
  127. int main()
  128. {
  129. int level = ;
  130. BiThrTree T,p;
  131. CreatBiThrTree(&T);
  132. Pre_Order_Traverse(T, level);
  133. in_Threading(T, &p);
  134. In_Order_Traverse(T);
  135. }

线索二叉树【C语言】的更多相关文章

  1. 数据结构之线索二叉树——C语言实现

     线索二叉树操作 (1) 线索二叉树的表示:将每个节点中为空的做指针与右指针分别用于指针节点的前驱和后续,即可得到线索二叉树. (2) 分类:先序线索二叉树,中序线索二叉树,后续线索二叉树 (3) 增 ...

  2. 数据结构之---C语言实现线索二叉树

    //线索二叉树,这里在二叉树的基础上增加了线索化 //杨鑫 #include <stdio.h> #include <stdlib.h> typedef char ElemTy ...

  3. 【Java】 大话数据结构(9) 树(二叉树、线索二叉树)

    本文根据<大话数据结构>一书,对Java版的二叉树.线索二叉树进行了一定程度的实现. 另: 二叉排序树(二叉搜索树) 平衡二叉树(AVL树) 二叉树的性质 性质1:二叉树第i层上的结点数目 ...

  4. 数据结构《9》----Threaded Binary Tree 线索二叉树

    对于任意一棵节点数为 n 的二叉树,NULL 指针的数目为  n+1 , 线索树就是利用这些 "浪费" 了的指针的数据结构. Definition: "A binary ...

  5. 线索二叉树Threaded binary tree

    摘要   按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列.在该序列中,除第一个结点外每个结点有且仅有一个直接前驱结点:除最后一个结点外每一个结点有且仅有一个直接后继结点.这 ...

  6. 遍历二叉树 traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化

    遍历二叉树   traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化 1. 二叉树3个基本单元组成:根节点.左子树.右子树 以L.D.R ...

  7. 树和二叉树->线索二叉树

    文字描述 从二叉树的遍历可知,遍历二叉树的输出结果可看成一个线性队列,使得每个结点(除第一个和最后一个外)在这个线形队列中有且仅有一个前驱和一个后继.但是当采用二叉链表作为二叉树的存储结构时,只能得到 ...

  8. 图解中序遍历线索化二叉树,中序线索二叉树遍历,C\C++描述

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  9. 后序线索二叉树中查找结点*p的后继

    在后序线索二叉树中查找结点*p的后继: 1.若结点*p为根,则无后继:2.若结点*p为其双亲的右孩子,则其后继为其双亲:3.若结点*p为其双亲的左孩子,且双亲无右子女,则其后继为其双亲:4.若结点*p ...

  10. 线索二叉树的理解和实现(Java)

    线索二叉树的基本概念 我们按某种方式对二叉树进行遍历,将二叉树中所有节点排序为一个线性序列,在该序列中,除第一个结点外每个结点有且仅有一个直接前驱结点:除最后一个结点外每一个结点有且仅有一个直接后继结 ...

随机推荐

  1. error: &#39;Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (2)&#39;

    [root@luozhonghua ~]#   /usr/bin/mysqladmin -u root password 'aaaaaa' /usr/bin/mysqladmin: connect t ...

  2. tomcat连接mysql的3个问题解决

    转载请标明出处: 本文出自:[ouyida3的博客] 1.BasicDataSourceFactory Caused by: java.lang.ClassNotFoundException: org ...

  3. 破解IntelliJ IDEA 2017

    一.下载地址 http://www.jetbrains.com/idea/ 二.下载破解jar包 http://idea.lanyus.com/ 2.1 将下载好的jar包放在IDEA的bin文件下 ...

  4. P1656 炸铁路

    P1656 炸铁路 81通过 286提交 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 因为某国被某红色政权残酷 ...

  5. 产品架构model

  6. postgis经常使用函数介绍(一)

    概述: 在进行地理信息系统开发的过程中,经常使用的空间数据库有esri的sde,postgres的postgis以及mySQL的mysql gis等等,在本文.给大家介绍的是有关postgis的一些经 ...

  7. Excel 常用快捷键键 快捷方式

    移动整行的位置 Shift + Alt + 鼠标拖拽 不加Shit + Alt 移动后 留白 注意:需要移动鼠标到行的最上面,变成十字箭头

  8. OTA升级包制作工具处理过程分析

    http://blog.csdn.net/ly890700/article/details/56048815 Android Recovery(30)  1.概述  OTA升级包制作工具是一个用pyt ...

  9. sql server的版本检查

    https://support.microsoft.com/en-ph/help/321185/how-to-determine-the-version-edition-and-update-leve ...

  10. MSP430:PWM产生

    #define     PWM                      BIT6 //  Description: This program generates one PWM output on ...