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;
            }
        }
    }
}