二进制搜索树的最大深度

时间:2014-04-18 03:18:09

标签: c++ algorithm data-structures binary-search-tree

我想找到二叉搜索树的最大深度。我找到了一个代码。

int maxDepth(struct node* node) { 
  if (node==NULL) { 
    return(0); 
  } 
  else { 
    // compute the depth of each subtree 
    int lDepth = maxDepth(node->left); 
    int rDepth = maxDepth(node->right);
    // use the larger one 
    if (lDepth > rDepth) return(lDepth+1); 
    else return(rDepth+1); 
  } 
} 

我想知道node-> left怎么会返回1?

是默认的吗?代码很简单,但我不知道答案来自哪里,有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

鉴于这棵树:

[A]

/ \

[B] [C]

对于[B],将使用NULL调用maxDepth,对于带有NULL的[C],将返回零,因此递归调用最终返回0 + 1.

如果在[C]下有一个节点[D],那么对[D] maxDepth的调用将返回NULL而D将返回0 + 1,然后递归将继续按比例放大,[C]将接收0 + 1并且会返回一些+1,返回maxDepth为2,该值大于保持[B]为1的分支的深度,因此从完全递归返回maxDepth为2。

答案 1 :(得分:1)

node指向某个叶子时,其node->leftnode->right都为NULL。因此maxDepth()都返回0。因此,此叶子的当前递归仅返回深度0 + 1 = 1.

你可以证明它的正确性。

<强>初始化

当节点为NULL时,它返回0。空树的深度为0,这是真的。 当节点是叶子时,它返回1。刚刚解释过。

<强>维护

如果节点存在(不是NULL)且我们知道其子节点的深度,则此节点的深度将为max(depth of left, depth of right) + 1。这就是回归的原因。

<强>终止

它将终止,因为当它到达叶子时,递归将停止变深并返回。整个递归完成后,maxDepth(root)将返回root的深度。