当前位置:   article > 正文

7-1 孩子链存储结构下树的基本运算算法和求树t的高度_链式二叉树的遍历孩子链式存储下树上的基本运算算法和求树t的高度c语言

链式二叉树的遍历孩子链式存储下树上的基本运算算法和求树t的高度c语言
  1. //孩子链存储结构下树的基本运算算法和求树t的高度
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #define MaxSons 10
  5. #define MaxSize 100
  6. typedef struct node
  7. { char data; //节点的值
  8. struct node *sons[MaxSons]; //指向孩子节点
  9. } TSonNode; //孩子链存储结构类型
  10. TSonNode *CreateTree(char *str) //由str建立孩子链存储结构
  11. { struct
  12. { TSonNode *nodep; //节点指针
  13. int num; //孩子个数
  14. } St[MaxSize]; //定义顺序栈
  15. int top=-1; //栈顶指针
  16. int i=0,j; char ch=str[i];
  17. TSonNode *t=NULL,*p;
  18. while (ch!='\0')
  19. { switch(ch)
  20. {
  21. case '(': top++; St[top].nodep=p;
  22. St[top].num=0; //当前节点*p进栈
  23. break;
  24. case ')':top--; break; //退栈
  25. case ',':St[top].num++; break; //栈顶节点增加一个孩子
  26. default:
  27. p=(TSonNode *)malloc(sizeof(TSonNode));
  28. p->data=ch; //建立一个节点p存放ch
  29. for (j=0;j<MaxSons;j++) //所有孩子指针置为NULL
  30. p->sons[j]=NULL;
  31. if (t==NULL) //原为空树
  32. t=p;
  33. else //将其作为栈顶节点的一个孩子
  34. St[top].nodep->sons[St[top].num]=p;
  35. break;
  36. }
  37. i++;
  38. ch=str[i];
  39. }
  40. return t;
  41. }
  42. void DispTree(TSonNode *t) //输出孩子链存储结构
  43. { int i;
  44. if (t!=NULL)
  45. { printf("%c",t->data);
  46. if (t->sons[0]!=NULL) //t节点至少有一个孩子
  47. { printf("("); //输出一个左括号
  48. for (i=0;i<MaxSons;i++)
  49. { DispTree(t->sons[i]);
  50. if (t->sons[i+1]!=NULL) //如果有下一个孩子
  51. printf(","); //输出一个','
  52. else //如果没有下一个孩子
  53. break; //退出循环
  54. }
  55. printf(")"); //输出一个右括号
  56. }
  57. }
  58. }
  59. void DestroryTree(TSonNode *&t) //销毁树t
  60. { int i;
  61. if (t!=NULL)
  62. { for (i=0;i<MaxSons;i++)
  63. { if (t->sons[i]!=NULL) //有子树
  64. DestroryTree(t->sons[i]);//销毁该子树
  65. else //再没有子树
  66. break; //退出循环
  67. }
  68. free(t); //释放根节点
  69. }
  70. }
  71. int TreeHeight1(TSonNode *t) //求树t高度
  72. { TSonNode *p;
  73. int i,h,maxh=0;
  74. if (t==NULL) return 0; //空树返回高度0
  75. else //处理非空树
  76. { for (i=0;i<MaxSons;i++)
  77. { p=t->sons[i]; //p指向t的第i-1个孩子节点
  78. if (p!=NULL) //若存在第i-1个孩子
  79. { h=TreeHeight1(p); //求出对应子树的高度
  80. if (maxh<h) maxh=h; //求所有子树的最大高度
  81. }
  82. }
  83. return(maxh+1); //返回maxh+1
  84. }
  85. }
  86. int main()
  87. {
  88. TSonNode *t;
  89. t=CreateTree("A(B,C(E,F,G),D)");
  90. printf("t:"); DispTree(t);
  91. printf("\n树t的高度:%d\n",TreeHeight1(t));
  92. DestroryTree(t);
  93. return 1;
  94. }

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

闽ICP备14008679号