【发布时间】:2017-04-04 10:12:44
【问题描述】:
我遇到了以下实现,花了一些时间,但仍然无法掌握想法。有人可以逐行解释它在做什么吗?我只是不明白它在什么时候可以决定一个节点是一个祖先。
谢谢
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null || root == p || root == q) return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if(left != null && right != null) return root;
return left != null ? left : right;
}
}
【问题讨论】:
-
递归函数真的很难理解。把它们画在纸上会有帮助。
-
这里的代码是这个答案中代码的稍微紧凑的版本:stackoverflow.com/a/9046307/2513200
-
@Hulk 没有冒犯,区别完全无关紧要,即使从编译器的角度来看也是如此。
-
@SauravSahu 是的,我同意它是等价的。区别纯粹是样式和 cmets。
标签: java algorithm binary-tree lowest-common-ancestor