当给定多个节点时,我们可以通过log2(n)来计算二叉树的最小深度
其中n是节点数。
如果您将树绘制为最大深度(例如12个节点),则表明如果树要保持平衡,则最大深度只能为4。
0
/ \
0 0
/ \ / \
0 0 0 0
/\ \ \
0 0 0 0
抱歉糟糕的ascii艺术。有没有人知道在给定节点数时能够计算二叉树最大深度的论坛?或者至少指出我正确的方向?
答案 0 :(得分:2)
使用根元素:
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;
}
通过使用节点数和一些数学逻辑(我绝对无法正确表达(我绝不是数学大师);但这里是):
观察:
分析:
- m =>最大深度(实际深度的INT部分,丢弃任何小数位)
n =>节点数
ln =>自然对数(= log [e])
2 ^ m = n
ln(2 ^ m)= ln(n)
结论:
现在,如果m = 2,...,那么最大深度为2.只需得到它的int部分。 ; - )
注意:我肯定在这里重新发明轮子;但这可能是处理你一无所知的事情的乐趣的一部分;并且这样做,完全遵循你的直觉和观察......: - )
答案 1 :(得分:2)
最简单的答案如下:
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;
}
答案 2 :(得分:1)
不给出给定(n)= 15的节点 公式为-log2n(log n base 2) 现在取最大值必须小于15,并且必须是2的幂函数。 在这里,15给出no将是8。 现在,n = 8 log2(8)= 3,这是我们要求的答案