繁体   English   中英

二叉搜索树的最大深度

[英]Max depth of 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?

是默认设置吗? 代码很简单,但是我不知道答案从哪里来,有人可以向我解释吗?

给定这棵树:

[一种]

/ \\

[B] [C]

将为[B]的NULL调用maxDepth,为[C]的NULL调用maxDepth,它们都返回零,因此递归调用最终返回0 + 1。

如果在[C]下有一个节点[D],则对[D] maxDepth的调用将返回NULL,而D将返回0 + 1,则递归将继续扩大,并且[C]将收到0 + 1并会+1,返回的maxDepth为2,大于保留[B]的分支的深度为1,因此从完整的递归返回maxDepth为2。

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

您可以证明其正确性。

初始化

当节点为NULL ,它返回0 确实,一棵空树的深度为0 当节点为leaf时,它返回1 正如刚刚解释的那样。

保养

如果一个节点存在(非NULL )并且我们知道其子节点的深度,则该节点的深度将为max(depth of left, depth of right) + 1 这就是返回的内容。

终止

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM