Leetcode题解、二叉树最近公共祖先
我之前的疑点:在确定当前节点符合结果的时候,并没有执行return,而是继续运行,会不会有其他的符合条件的节点覆盖之前的节点,而使得结果错误
我手动的模拟了代码在搜索最近公共祖先的步骤,发现并不会覆盖原来的节点,因为只会有一个符合条件。
class Solution {
TreeNode result = new TreeNode();
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
contains(root, p, q);
return result;
}
public boolean contains(TreeNode root, TreeNode p, TreeNode q) {
if(root == null) return false;
boolean left = contains(root.left, p, q);
boolean right = contains(root.right, p, q);
/**
这里采用的是后序遍历,从下向上进行的遍历,如果在下面找到了符合条件的节点,那么就是最近公共祖先。
这里不需要担心result会被其他符合条件的节点覆盖,因为只有一个节点会符合条件,不会有其他节点覆盖
的机会
因为如果再向上继续遍历,只会有一个子树返回true,不会有两个子树返回true的情况
同时一个子树返回true时,并不会有当前根节点等于p或者q的情况出现。
*/
if((left && right) || ((root == p || root == q) && (left || right))) {
result = root;
}
// 这里就相当于判断当前子树是否包含p和q中的一个,如果满足下面的一个条件就返回true。
return root == p || root == q || left || right;
}
}
656

被折叠的 条评论
为什么被折叠?



