[英]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->left
和node->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.