面试题68 - I. 二叉搜索树的最近公共祖先
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-lcof/
思路
树结构的题目,应该首先想到递归解法。题目比较难得地方在于如果判断某个节点是否为给定两节点的公共祖先。难点在于找出其中规律,对于某个节点来说,分成四种情况:
- p,q节点在root的右子树,并且p,q不等于root。此时公共祖先必在root的右子树中
- p,q节点在root的左子树,并且p,q不等于root。此时公共祖先必在root的左子树种
- p(或者q)就是root节点,此时,p(或者q)是公共祖先。
- p,q分别在root树的左、右子树,此时root节点是必为最近公共祖先
java代码
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(p.val<root.val&& q.val<root.val){
return lowestCommonAncestor(root.left, p, q);
}
if(p.val>root.val&&q.val>root.val){
return lowestCommonAncestor(root.right, p, q);
}
return root;
}