/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @param p int整型 
 * @param q int整型 
 * @return int整型
 */
function lowestCommonAncestor(root, p, q) {
    // write code here
    let ans = null;
    let flag = true;
    function findNode(node) {
        if (node == null) {
            return 0;
        }
        let max = 0;
        // 查询左节点查到目标节点个数
        if (node.left) {
            l = findNode(node.left);
            max = l;
        }
        // 查询右节点查到目标节点个数
        if (node.right) {
            r = findNode(node.right);
            max += r;
        }
        if (node.val == p) {
            max++;
        }
        if (node.val == q) {
            max++;
        }
        // 若是第一次找到两个目标节点,则将ans指向当前node节点
        if (flag && max >= 2) {
            ans = node;
            flag = false;
        }
        // console.log("max:", max);
        // console.log("node:", node);
        return max;
    }
    findNode(root);
    return ans.val;
}
module.exports = {
    lowestCommonAncestor: lowestCommonAncestor
};