import java.util.*;


public class Solution {

    public boolean flag = false;
    public int lowestCommonAncestor (TreeNode root, int p, int q) {
        // write code here
        ArrayList<Integer> listP = new ArrayList<>();
        ArrayList<Integer> listQ = new ArrayList<>();
        dfs(root,listP,p);
        flag = false;
        dfs(root,listQ,q);

        int res = 0;
        for(int i = 0;i<listP.size() && i<listQ.size();i++){
            if(listP.get(i).equals(listQ.get(i))){
                res = listP.get(i);
            }else{
                break;
            }
        }

        return res;

    }

    public void dfs(TreeNode root, ArrayList<Integer> list, int num){

        if(flag || root == null){
            return ;
        }
        // 将根节点添加到路径
        list.add(root.val);
        // 当找到目标节点,将flag=true,表示无需进行回溯操作
        if(root.val == num){
            flag = true;
            return;
        }
        // 遍历左右子树
        dfs(root.left,list,num);
        dfs(root.right,list,num);
        if(flag) return;

        list.remove(list.size() - 1);
    }
}