问题
例子
思路
使用二叉树的特点:左子树<根节点<右子树
-
方法1
当做普通二叉树,同236题
-
方法2
当做二叉排序树,利用其特点
代码
//方法1
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null || q==root || p==root) return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if(left==null && right==null) return null;
if(left!=null && right!=null) return root;
//有一个不为空,一个为空
return left!=null?left:right;
}
//方法2
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
return get(root,p,q);
}
public TreeNode get(TreeNode root, TreeNode p, TreeNode q) {
if(root==null || p==root || q==root) return root;
int min=Math.min(p.val,q.val);
int max=Math.max(p.val,q.val);
if(root.val>min && root.val<max) return root;
if(min>root.val) return get(root.right,p,q);
if(max<root.val) return get(root.left, p,q);
return null;
}
}