当给定一定数量的节点时,我们可以通过执行log2(n)来计算二叉树的最小深度
其中n是节点数。
如果您绘制出树的最大深度,例如12个节点,那么如果树要保持平衡,则最大深度只能是4。
0
/ \
0 0
/ \ / \
0 0 0 0
/\ \ \
0 0 0 0很抱歉我的ascii艺术很糟糕。有没有人知道在给定节点数的情况下,能够计算出二叉树的最大深度的公式?或者至少给我指个正确的方向?
发布于 2012-03-23 19:11:35
通过使用根元素 :
int maxHeight(BinaryTree *p) {
if (!p) return 0;
int left_height = maxHeight(p->left);
int right_height = maxHeight(p->right);
return (left_height > right_height) ? left_height + 1 : right_height + 1;
}通过使用节点的数量和一些数学逻辑(我肯定不能正确地表达它(我绝不是数学专家);但它在这里):
观察:
分析:
(=loge)
结论:
现在,如果m= 2,...,那么最大深度是2,只需得到它的int部分。;-)
备注:我肯定是在重新发明轮子;但这可能是处理一些你一无所知的事情的乐趣的一部分;并且只根据你的直觉和观察来做……:-)
发布于 2013-07-14 03:21:43
最简单的答案看起来像这样:
int getMaxDepth(Node node)
{
if(node == null) {
return 0;
}
int leftDepth = 1 + getMaxDepth(node.left);
int rightDepth = 1 + getMaxDepth(node.right);
return left > right ? left : right;
}概念explained
发布于 2013-04-26 23:34:25
假设给定的节点数目(N)= 15公式is- log2n (以2为底的对数n)现在采用的最大值必须小于15,并且必须是2的幂结果。正如这里给出的15,no将为8。现在,n=8 log2(8)= 3,这是我们所需的答案
https://stackoverflow.com/questions/9837891
复制相似问题