通过使用根元素:
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;
}
通过使用节点的数量和一些数学逻辑(我绝对无法正确表达(我绝不是数学大师);但在这里):
观察:
- 2-3 个节点 => 最大深度 = 1 (2 = 2^1, 3 = 2^1,.. < 2^2 )
- 4-7 个节点 => 最大深度 = 2 (4 = 2^2, 5 = 2^2,.., 6 = 2^2,.., 7 = 2^2,... < 2^3)
- 8-15 个节点 => 最大深度 = 3
- ...
分析 :
- m => max Depth(实际是深度的 INT 部分,丢弃任何小数位)
n => 节点数
ln => 自然对数 (=log[e])
2^m = n
ln(2^m) = ln(n)
- m*ln(2) = ln(n)
- m = ln(n)/ln(2)
结论 :
现在,如果 m = 2,... ,则最大深度为 2。只需获取它的 int 部分。;-)
注意:我肯定在这里重新发明轮子;但这可能是处理你一无所知的事情的乐趣的一部分;并这样做,完全按照你的直觉和观察...... :-)