Validate Binary Tree Nodes
MediumTreeDepth-First SearchBreadth-First SearchUnion FindGraphBinary Tree
Solution
export function validateBinaryTreeNodes(
n: number,
leftChild: number[],
rightChild: number[],
): boolean {
let remainNode = n;
const parents = new Array(n).fill(undefined).map((_, i) => i);
const find = (node: number): number => {
if (node !== parents[node]) {
parents[node] = find(parents[node]);
}
return parents[node];
};
const union = (parent: number, child: number) => {
const parentNode = find(parent);
const childNode = find(child);
if (child !== childNode || parentNode === childNode) {
return false;
}
remainNode -= 1;
parents[childNode] = parentNode;
return true;
};
for (let node = 0; node < n; node++) {
for (const childNode of [leftChild[node], rightChild[node]]) {
if (childNode === -1) continue;
if (!union(node, childNode)) {
return false;
}
}
}
return remainNode === 1;
}