5a3c1b2d创建于 2025年8月3日历史提交
/**
 * DFS
 * Time O(n) | Space O(n)
 * https://leetcode.com/problems/validate-binary-tree-nodes/
 *
 * @param {number} n
 * @param {number[]} leftChild
 * @param {number[]} rightChild
 * @return {boolean}
 */
var validateBinaryTreeNodes = function (n, leftChild, rightChild) {
    const visited = new Set();

    const findRoot = () => {
        const childrenSet = new Set();
        for (let i = 0; i < n; i++) {
            childrenSet.add(i);
        }

        for (let i = 0; i < n; i++) {
            childrenSet.delete(leftChild[i]);
            childrenSet.delete(rightChild[i]);
        }

        return [...childrenSet][0];
    };

    const dfs = (i) => {
        if (i === -1) return true;
        if (visited.has(i)) return false;

        const left = leftChild[i];
        const right = rightChild[i];
        visited.add(i);
        return dfs(left) && dfs(right);
    };

    const root = findRoot();
    return dfs(root) && visited.size === n;
};