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