import java.util.*;
public class Solution {
// 方法:搜索路径比较
// 因为题中的二叉搜索树没有相同的结点,因此分别从根节点往下利用二叉搜索树较大的数在右子树,较小的数在左子树,可以轻松找到p、q
public int lowestCommonAncestor (TreeNode root, int p, int q) {
// write code here
ArrayList<Integer> listP = new ArrayList<>();
ArrayList<Integer> listQ = new ArrayList<>();
recordPath(p,listP,root);
recordPath(q,listQ,root);
System.out.println(listP.toString());
System.out.println(listQ.toString());
// 根据记录下来的路径找到最后一个重复点,就是最近公共祖先
int len = Math.min(listP.size(),listQ.size());
int res = -1;
for(int i = 0;i<len;i++){
if(!listP.get(i).equals(listQ.get(i))){
break;
}
res = listP.get(i);
}
return res;
}
public void recordPath(int num, ArrayList<Integer> list, TreeNode root) {
TreeNode node = root;
while(node != null){
list.add(node.val);
if(node.val < num){
node = node.right;
}else if(node.val > num){
node = node.left;
}else if(node.val == num){
break;
}
}
}
}