Created
August 5, 2023 10:08
-
-
Save wise-introvert/bd4c408cfd383c32d2f38f766b9ec7d1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface TreeNode { | |
capacity: number; | |
children: TreeNode[]; | |
} | |
const findAverage = (node: TreeNode): number => { | |
let sum: number = 0, | |
count: number = 0; | |
let traverse = (node: TreeNode): void => { | |
sum += node.capacity; | |
count += 1; | |
if (node.children.length) { | |
for (let i: number = 0; i < node.children.length; i++) { | |
traverse(node.children[i]); | |
} | |
} | |
}; | |
traverse(node); | |
sum -= node.capacity; | |
count -= 1; | |
if (sum <= 0 || count <= 0) return 0; | |
return sum / count; | |
}; | |
const findMinPower = (rootTreeNode: TreeNode): number => { | |
let minPower = 0; | |
let traverse = (node: TreeNode): void => { | |
const average = findAverage(node); | |
if (node.capacity < average) { | |
minPower += average - node.capacity; | |
} | |
if (node.children) { | |
for (let i: number = 0; i < node.children.length; i++) { | |
traverse(node.children[i]); | |
} | |
} | |
}; | |
traverse(rootTreeNode); | |
return minPower; | |
}; | |
const rootNode: TreeNode = { | |
capacity: 100, | |
children: [ | |
{ | |
capacity: 200, | |
children: [ | |
{ | |
capacity: 300, | |
children: [ | |
{ | |
capacity: 500, | |
children: [], | |
}, | |
{ | |
capacity: 400, | |
children: [], | |
}, | |
], | |
}, | |
], | |
}, | |
], | |
}; | |
console.log(findMinPower(rootNode)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment