import java.util.*;

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

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        return dfs(root, o1, o2).val;
        
    }
    public TreeNode dfs(TreeNode root, int o1, int o2){
        // 递归终止条件
        if(root==null || root.val==o1 || root.val==o2){
            return root;
        }
        //查找左子树是否有o1或o2节点
        TreeNode left = dfs(root.left, o1, o2);
        //查找右子树是否有o1或o2节点
        TreeNode right = dfs(root.right, o1, o2);
        //如果左子树为空,说明o1和o2节点都在右子树上,返回右子树
        if(left==null){
            return right;
        }
        //相反
        if(right==null){
            return left;
        }
        //如果都不为空,说明两个节点分别在左右两端
        return root;
    }
}