求二叉树高度

22 篇文章 1 订阅

因为树是递归定义的,所以用递归算法很方便。

  1. #define _CRT_SECURE_NO_WARNINGS  
  2. #include <iostream>  
  3. #include <cstdio>  
  4. using namespace std;  
  5.   
  6. struct Node {  
  7.     char data;  
  8.     Node *lchild;  
  9.     Node *rchild;  
  10. };  
  11.   
  12. void High(Node *T, int &h)  
  13. {  
  14.     if (T == NULL)  
  15.         h = 0;  
  16.     else {  
  17.         int left_h;  
  18.         High(T->lchild, left_h);  
  19.         int right_h;  
  20.         High(T->rchild, right_h);  
  21.   
  22.         h = 1 + max(left_h, right_h);  
  23.     }  
  24. }  
  25.   
  26. Node *CreateBiTree(Node *&T) {  // 算法6.4  
  27.     // 按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,  
  28.     // 构造二叉链表表示的二叉树T。  
  29.     char ch;  
  30.     cin >> ch;  
  31.     if (ch == '#')  
  32.         T = NULL;  
  33.     else {  
  34.         if (!(T = (Node *)malloc(sizeof(Node))))  
  35.             return 0;  
  36.         T->data = ch;              // 生成根结点  
  37.         CreateBiTree(T->lchild);   // 构造左子树  
  38.         CreateBiTree(T->rchild);   // 构造右子树  
  39.     }  
  40.     return T;  
  41. // CreateBiTree  
  42.   
  43. void Free(Node *&T)  
  44. {  
  45.     if (T == NULL)  
  46.         return;  
  47.   
  48.     Free(T->lchild);  
  49.     //  T->lchild = NULL;  
  50.     Free(T->rchild);  
  51.     //  T->rchild = NULL;  
  52.     free(T);  
  53.     T = NULL;  
  54. }  
  55.   
  56. int main(int argc, char **argv)  
  57. {  
  58.     freopen("cin.txt""r", stdin);  
  59.   
  60.     Node *T = NULL;  
  61.     CreateBiTree(T);  
  62.   
  63.     int height;  
  64.     High(T, height);  
  65.     cout << height << endl;  
  66.   
  67.     Free(T);  
  68.   
  69.     return 0;  
  70. }  
  71.   
  72. /* cin.txt: 
  73. A 
  74. B 
  75. C 
  76. # 
  77. # 
  78. D 
  79. E 
  80. # 
  81. G 
  82. # 
  83. # 
  84. F 
  85. # 
  86. # 
  87. # 
  88. */  

 

构造的树:

输出为5。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anssummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值