Minimum Time to Collect All Apples in a Tree
MediumHash TableTreeDepth-First SearchBreadth-First Search
Solution
export function minTime(n: number, edges: number[][], hasApple: boolean[]): number {
const tree = new Array(n).fill(undefined).map(() => new Array<number>());
for (const [a, b] of edges) {
tree[a].push(b);
tree[b].push(a);
}
const dfs = (currentNode = 0, parentNode = -1): number => {
let [totalTime, childTime] = [0, 0];
for (const childNode of tree[currentNode]) {
if (childNode === parentNode) {
continue;
}
childTime = dfs(childNode, currentNode);
if (0 < childTime || hasApple[childNode]) {
totalTime += childTime + 2;
}
}
return totalTime;
};
return dfs(0, -1);
}