题目链接
68.1 二叉查找树
题目链接
解题思路
在二叉查找树中,两个节点 p, q 的公共祖先 root 满足 root.val >= p.val && root.val <= q.val。
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root.val>p.val && root.val>q.val) return lowestCommonAncestor(root.left, p, q);
else if (root.val<p.val && root.val<q.val) return lowestCommonAncestor(root.right, p, q);
else return root;
}
}
68.2 普通二叉树
题目链接
解题思路
在左右子树中查找是否存在 p 或者 q,如果 p 和 q 分别在两个子树中,那么就说明根节点就是最低公共祖先。
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root==null || root==p || root==q) return root;
TreeNode l = lowestCommonAncestor(root.left, p, q);
TreeNode r = lowestCommonAncestor(root.right, p, q);
if (l!=null && r!=null) return root;
return l==null? r: l;
}
}