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 {
public ArrayList<Integer> getPath(TreeNode root,int target){
ArrayList<Integer> path = new ArrayList<Integer>();
TreeNode node=root;
while(node.val != target){
path.add(node.val);
if(node.val > target){
node = node.left;
}else{
node = node.right;
}
}
path.add(target);
return path;
}
public int lowestCommonAncestor (TreeNode root, int p, int q) {
ArrayList<Integer> pPath = pPath = getPath(root,p);
ArrayList<Integer> qPath = qPath = getPath(root,q);
int res = 0;
for(int i=0;i<pPath.size()&&i<qPath.size();++i){
int x = pPath.get(i);
int y = qPath.get(i);
if(x==y){
//保留上一次相等的值
res = x;
}else{
//找到第一个不等的值,则前一个相等的值为最近公共祖先
break;
}
}
return res;
}
}
方法:比较路径法
通过遍历查询目标节点得到路径,找到第一个不相等的值,则前一个相等的值就是最近公共祖先。
1、定义一个记录查询路径的函数
2、调用函数得到两个路径
3、遍历两个路径,记录相等值
4、找到不等值
5、返回记录值


京公网安备 11010502036488号