import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
// List<Integer> nodeList1 = new ArrayList<>();
// findFather(root, o1, nodeList1);
// isFind = false;
// List<Integer> nodeList2 = new ArrayList<>();
// findFather(root, o2, nodeList2);
// int result = 0;
// for (int i = 0; i < nodeList1.size() && i < nodeList2.size(); i++) {
// if (nodeList1.get(i) == nodeList2.get(i)) {
// result = nodeList1.get(i);
// }else{
// break;
// }
// }
// return result;
if(root == null) return -1;
if(root.val == o1 || root.val == o2) return root.val;
int left = lowestCommonAncestor (root.left, o1, o2);
int right = lowestCommonAncestor (root.right, o1, o2);
if(left == -1) return right;
if(right == -1) return left;
return root.val;
}
private boolean isFind = false;
private void findFather(TreeNode root, int target, List<Integer> paths) {
if (isFind || root == null) return;
paths.add(root.val);
if (root.val == target) {
isFind = true;
return;
}
findFather(root.left, target, paths);
findFather(root.right, target, paths);
if(isFind) return; //找到元素
paths.remove(paths.size()-1);//回溯
}
}