题解 | #二叉搜索树的最近公共祖先#
二叉搜索树的最近公共祖先
http://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param p int整型
* @param q int整型
* @return int整型
*/
int pre = -1;
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here
int m = p>q?q:p;
int n = p>q?p:q;
inorder(root, m, n);
return pre;
}
public void inorder(TreeNode root, int p, int q){
if(root == null){
return;
pre = root.val;
return;
pre = root.val;
return;
inorder(root.right,p,q);
inorder(root.left,p,q);
}
}
}
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param p int整型
* @param q int整型
* @return int整型
*/
int pre = -1;
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here
int m = p>q?q:p;
int n = p>q?p:q;
inorder(root, m, n);
return pre;
}
public void inorder(TreeNode root, int p, int q){
if(root == null){
return;
}
//说明在左右子树中,则最近祖先是该节点
if(root.val>p&&root.val<q){pre = root.val;
return;
}
//说明在同一侧,则最近祖先是最先出现的节点
if(root.val==p||root.val==q){pre = root.val;
return;
}
//说明在右侧
if(root.val<p){inorder(root.right,p,q);
}
//说明在右侧
if(root.val>q){inorder(root.left,p,q);
}
}
}