二叉搜索树的最近公共祖先
第一种为通用一些的解法。
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here
TreeNode node=dfs(root,p,q);
return node.val;
}
public TreeNode dfs(TreeNode root,int p,int q){
if(root==null||root.val==p||root.val==q) return root;
TreeNode left=dfs(root.left,p,q);
TreeNode right=dfs(root.right,p,q);
if(left==null) return right;
if(right==null) return left;
return root;
}
第二种解法为利用二叉搜索树的性质。<q&&<p在左边>p&&>q在右边,在中间即为一大一小,直接返回即可。
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here
if(root.val<p&&root.val<q) return lowestCommonAncestor(root.right,p,q);
if(root.val>p&&root.val>q) return lowestCommonAncestor(root.left,p,q);
return root.val;
}