【发布时间】:2015-09-12 19:51:59
【问题描述】:
如何递归求二叉树中节点的高度之和?
例子:
public int totalHeight() {
return totalHeight(root);
}
private int totalHeight(BinaryNode<AnyType> n) {
int totalHeight = 0;
if (n.left == null && n.right == null)
return totalHeight;
if (n.left != null && n.right != null)
return totalHeight + 1
+ Math.max(totalHeight(n.left), totalHeight(n.right));
if (n.left != null)
return totalHeight + 1 + Math.max(totalHeight(n.left), -1);
if (n.right != null)
return totalHeight + 1 + Math.max(-1, totalHeight(n.right));
return totalHeight;
}
我试过这个,但它只得到树的高度而不是所有节点高度的总和。
我觉得很难在递归中跟踪计数器,似乎totalHeight 每次递归调用都设置为0。这不好。
【问题讨论】:
-
此方法为您提供单个节点的高度。如果您要创建另一个函数并将其应用于树中的每个节点并添加结果会怎样?这将是 O(n^2*log n) (这很糟糕)但会起作用。
-
使用全局变量来跟踪总数。
标签: java recursion binary-tree