import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // root为空则说明越过了叶子节点
        if(root == null) return -1;
        // 如果root为o1或o2中任意一个,则root就是公共祖先
        if(root.val == o1 || root.val == o2) return root.val;

        //root不为o1或o2
        int left = lowestCommonAncestor(root.left, o1, o2);
        int right = lowestCommonAncestor(root.right, o1, o2);
        //如果left=-1,说明在左子树中一直找到叶子节点,也没找到最近公共祖先
        //所以最近公共祖先,必在右子树中,right即为最近公共祖先
        if(left == -1) return right;
        //同理,最近公共祖先必在左子树中,left即为最近公共祖先
        else if(right == -1) return left;
        //若left和right都不为-1,则说明o1,o2节点在root的异侧,则root为最近公共祖先
        else return root.val;
    }
}