【发布时间】:2020-09-02 22:01:53
【问题描述】:
所以问题是找到二叉树的直径。我的方法是,对于每个节点,找到左节点的高度和右节点的高度。如果 height(left node) + 1 (for current node) + height(right node) 大于当前最大直径,我然后更新最大直径。我最初为此使用了一个全局变量,但改为使用大小为 1(int[] 直径)的数组。我知道这是 hacky,而不是在编程面试中有人可能会喜欢的东西,所以有人有更好的建议吗?我知道在 C 语言中我可以只使用指针,但不幸的是我没有使用 Java 的奢侈。
public static int height(TreeNode node, int[] diameter) {
if (node == null) {
return 0;
}
int leftHeight = height(node.left, diameter);
int rightHeight = height(node.right, diameter);
diameter[0] = Math.max(diameter[0], leftHeight + 1 + rightHeight);
return 1 + Math.max(leftHeight, rightHeight);
}
public int diameter(TreeNode root) {
int[] diameterArr = new int[1];
int heightRoot = height(root, diameterArr);
return diameterArr[0];
}
【问题讨论】:
-
为什么你需要一个大小为 1 的整数数组而不是一个整数本身?您应该提供一个最小的运行示例。为什么你需要一个全局变量?
标签: java arrays pointers global-variables