Skip to content

Instantly share code, notes, and snippets.

@wise-introvert
Created August 5, 2023 10:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wise-introvert/bd4c408cfd383c32d2f38f766b9ec7d1 to your computer and use it in GitHub Desktop.
Save wise-introvert/bd4c408cfd383c32d2f38f766b9ec7d1 to your computer and use it in GitHub Desktop.
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