90.png

    1. /*
    2. 以孩子兄弟链表为存储结构,请设计递归算法求树的高度
    3. 分析:
    4. 如果只有根节点,那么高度为1,如果有左孩子,那么高度由左孩子的左子树和右子树决定,取其大者。
    5. */
    6. typedef struct node {
    7. char data;
    8. node *fch, *nsib;
    9. }Tree;
    10. #define _CRT_SECURE_NO_WARNINGS
    11. #include <stdio.h>
    12. #include <stdlib.h>
    13. Tree *create(Tree *T) {//先序创建一颗二叉树
    14. char data;
    15. printf("请输入当前节点值:data=");
    16. scanf("%c", &data);
    17. getchar();
    18. if (data != '#') {
    19. T = (Tree *)malloc(sizeof(Tree));
    20. T->data = data;
    21. T->fch = NULL;
    22. T->nsib = NULL;
    23. T->fch = create(T->fch);
    24. T->nsib = create(T->nsib);
    25. }
    26. return T;
    27. }
    28. int getHigh(Tree *T) {
    29. int lhigh, rhigh;
    30. if (!T) {//空返回当前高度,这是递归的出口
    31. return 0;
    32. }
    33. else {
    34. lhigh = getHigh(T->fch);//记录左子树高度
    35. rhigh = getHigh(T->nsib);//记录右兄弟的高度,注意这里high不能再加一,因为他们是兄弟,平级
    36. if (lhigh + 1 > rhigh) {
    37. return lhigh + 1;
    38. }
    39. else {
    40. return rhigh;
    41. }
    42. }
    43. }
    44. int main() {
    45. Tree *T = (Tree *)malloc(sizeof(Tree *));
    46. T = create(T);
    47. int high = 0;
    48. high = getHigh(T);
    49. printf("树的高度为:%d", high);
    50. return 0;
    51. }