public int TreeHeight(int depth)
{
if (left != null && right == null)
return left.TreeHeight(depth);
else if (left == null && right != null)
return right.TreeHeight(depth);
else
return left.TreeHeight(depth) + right.TreeHeight(depth);
}
树看起来像这样:http://imgur.com/EBS30rl
您好,我正在使用一种返回树高的方法算法。 该方法只能访问左右节点。变量深度作为参数已经为方法本身带来了值1(计算树的根)。 我尝试过递归调用方法,但结果并不接近预期。 我之前的代码与下面的代码类似。
self.resortCopy = function(item) {
self.resorts.push(item);
self.backendCall(item) // this needs to be performed after returning true
return true;
答案 0 :(得分:3)
节点的高度是该节点与叶子之间最长路径上的边数。
对于BST,它可以递归表示为(伪代码):
height(node) =
{
0, when node == null
1 + max(height(node.left), height(node.right)), when node != null
}
因此,递归方法不需要depth
参数,可以是这样的:
public int TreeHeight()
{
return 1 + Math.Max(
left != null ? left.TreeHeight() : 0,
right != null ? right.TreeHeight() : 0
);
}
和C#6 null conditional operator,实现可能很简单:
return 1 + Math.Max(left?.TreeHeight() ?? 0, right?.TreeHeight() ?? 0);