关于二叉树高度的困惑

时间:2014-10-30 20:05:25

标签: c binary-tree

假设我的树看起来像这样

     5
   /  \
  1    8 
      /  \
     6    9

我写了一个程序来找到它的高度。

     65 int height(const TNODE* root) {                                                                                                                                                                                                           
 66         if (root == NULL) {                                                                                                                                                                                                               
 67                 return 0;                                                                                                                                                                                                                 
 68         } else {                                                                                                                                                                                                                          
 69                 int lDepth = height(root->left);                                                                                                                                                                                          
 70                 int rDepth = height(root->right);                                                                                                                                                                                         
 71                 if (lDepth > rDepth) {                                                                                                                                                                                                    
 72                         return (lDepth + 1);                                                                                                                                                                                              
 73                 } else {                                                                                                                                                                                                                  
 74                         return (rDepth + 1);                                                                                                                                                                                              
 75                 }                                                                                                                                                                                                                         
 76                                                                                                                                                                                                                                           
 77         }                                                                                                                                                                                                                                 
 78 }

运行此方法会为上面的树打印3。但是高度不应该是2,因为那是从根到最远叶子的边数?我在网上搜索过,而且我得到了相反的信息。有人会说我上面的树高3,而其他人说2。

那么我的树上面的高度应该是多少?为什么?

我的方法是否正确?

2 个答案:

答案 0 :(得分:3)

术语"身高"这里有点太通用了。根据精确的定义,2或3可能是正确的答案。

例如,如果我说明树的高度是"等级的数量"它包含,3是正确的答案。但是,如果我说树的高度是到达叶子的最大边数,没有多次越过边缘(即没有反向跟踪),那么2就是正确的答案。

根据我的经验,更常见的答案是3.树有3个级别。只有根节点的树的高度为1.我更喜欢这样,因为空树的高度为0。

答案 1 :(得分:1)

关于风格的建议。

  int height(const TNODE* root) {                                                                                                                                                                                                           
    if (root == NULL) {                                                                                                                                                                                                               
       return 0;                                                                                                                                                                                                                 
    } else {                                                                                                                                                                                                                          
      int lDepth = height(root->left);                                                                                                                                                                                          
      int rDepth = height(root->right);  
      return max ( lDepth, rDepth )  + 1;                                                                                                                                                                                                   
     }                                                                                                                                                                                                                                 
  }