【数据结构】二叉树的创建与遍历

前端之家收集整理的这篇文章主要介绍了【数据结构】二叉树的创建与遍历前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.  
  6.  
  7. #define OK 1
  8. #define ERROR 0
  9. #define TRUE 1
  10. #define FALSE 0
  11.  
  12. #define MAXSIZE 100 /* 存储空间初始分配量 */
  13.  
  14. typedef int Status;
  15.  
  16. typedef char TElemType; /* 假定二叉树的元素都是字符类型*/
  17. TElemType Nil = ' ';
  18.  
  19. typedef struct BiTNode
  20. {
  21. TElemType data;
  22. struct BiTNode *lchild,*rchild;
  23. }BiTNode,*BiTree;
  24.  
  25.  
  26. /* 模拟生成char数组, 用于构造二叉树所生产的数据***************/
  27. int index$ = 1;
  28. typedef char String[24];
  29. String str;
  30.  
  31. /* 将chars 用String结构体表示*/
  32. Status StrAssign(String S,char *chars)
  33. {
  34. int i;
  35. if (strlen(chars) > MAXSIZE) {
  36. return ERROR; // 超过了最大容量
  37. } else {
  38. // 第一个位置存放字符串的长度
  39. S[0] = strlen(chars);
  40. for (i= 1; i < S[0]; i++) {
  41. S[i] = *(chars + i -1);
  42. }
  43.  
  44. return OK;
  45. }
  46.  
  47.  
  48. }
  49.  
  50. /* ******************************************************/
  51.  
  52. /* 构造空的的二叉树T */
  53. Status InitBiTree(BiTree *T)
  54. {
  55. *T = NULL;
  56. return OK;
  57. }
  58.  
  59. /* 构造二叉树T, 使用的是递归创建的方法 */
  60. void CreateBiTree(BiTree *T)
  61. {
  62.  
  63.  
  64. if (index$ == strlen(str)) // 所有的元素都分配完毕, 即结束
  65. return;
  66. TElemType ch = str[index$++];
  67.  
  68.  
  69. if (ch == '#') {
  70. // 碰到#号, 停止生成新的结点
  71. *T = NULL;
  72. } else {
  73. *T = (BiTree)malloc(sizeof(BiTNode));
  74. if (!*T){
  75. exit(OVERFLOW); // malloc失败
  76. }
  77.  
  78. (*T)->data = ch; // 生成根节点
  79. CreateBiTree(&(*T)->lchild); // 构造左子树
  80. CreateBiTree(&(*T)->rchild); // 构造右子树
  81. }
  82.  
  83.  
  84. }
  85.  
  86. /* 前序遍历*/
  87. void PreOrderTraverse(BiTree *T)
  88. {
  89. if (*T == NULL)
  90. return;
  91.  
  92. printf("%c ",(*T)->data);
  93. PreOrderTraverse(&(*T)->lchild);
  94. PreOrderTraverse(&(*T)->rchild);
  95. }
  96.  
  97.  
  98.  
  99. int main() {
  100.  
  101. BiTree T;
  102. InitBiTree(&T);
  103.  
  104. // 构造字符串
  105. StrAssign(str,"ABDH#K###E##CFI###G#J##");
  106.  
  107.  
  108. // 构造二叉树
  109. CreateBiTree(&T);
  110.  
  111. PreOrderTraverse(&T);
  112.  
  113.  
  114. return 0;
  115. }

猜你在找的数据结构相关文章