package leetcode;
import java.util.ArrayList;
public class demo_236 {
boolean flag1=false;
boolean flag2=false;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
ArrayList<TreeNode> l1=new ArrayList<TreeNode>();
ArrayList<TreeNode> l2=new ArrayList<TreeNode>();
trace(root, p, q, l1, l2);
for(int i=l1.size()-1;i>=0;i--) {
if(l2.contains(l1.get(i))) {
return l1.get(i);
}
}
return root;
}
public void trace(TreeNode root,TreeNode p,TreeNode q,ArrayList<TreeNode> l1,ArrayList<TreeNode> l2) {
if(root!=null) {
if(flag1==false) {
l1.add(root);
}
if(flag2==false) {
l2.add(root);
}
if(flag1==false&&root.val==p.val) {
flag1=true;
}
if(flag2==false&&root.val==q.val) {
flag2=true;
}
if(flag1==true&&flag2==true) {return;}
trace(root.left, p, q, l1, l2);
trace(root.right, p, q, l1, l2);
if(flag1==false) {
l1.remove(l1.size()-1);
}
if(flag2==false) {
l2.remove(l2.size()-1);
}
}
}
}