我之前的疑点:在确定当前节点符合结果的时候,并没有执行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);
if((left && right) || ((root == p || root == q) && (left || right))) {
result = root;
}
// 这里就相当于判断当前子树是否包含p和q中的一个,如果满足下面的一个条件就返回true。
return root == p || root == q || left || right;
}
}



