Created
September 28, 2021 12:26
-
-
Save gladimdim/7dbd8d4a9aa6b58a20b8b62fbe7acd6a to your computer and use it in GitHub Desktop.
This file contains hidden or 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
class Node { | |
Node? left; | |
Node? right; | |
int value; | |
Node({required this.value, this.left, this.right}); | |
} | |
/* | |
Given a binary tree, return the level of the tree with minimum sum. | |
*/ | |
int main() { | |
var tree = Node(value: 5); | |
tree.left = Node(value: 3); | |
tree.left!.left = Node(value: 2); | |
tree.left!.right = Node(value: 1); | |
tree.right = Node(value: 15); | |
tree.right!.left = Node(value: 1); | |
tree.right!.right = Node(value: -30); | |
/* | |
5 | |
3 15 | |
2 1 1 -30 | |
min sum is level 2 (-26 sum) | |
*/ | |
print("Level of the nodes with min sum: ${findMinSum(tree)}"); | |
return findMinSum(tree); | |
} | |
int findMinSum(Node tree) { | |
List sums = []; | |
int level = 0; | |
sumRunner(tree, sums, level); | |
final minSum = sums.fold<int>(sums.first, (previousValue, element) { | |
return previousValue < element ? previousValue : element; | |
}); | |
return sums.indexOf(minSum); | |
} | |
void sumRunner(Node node, List sums, int level) { | |
try { | |
sums[level] += node.value; | |
} catch (e) { | |
sums.insert(level, node.value); | |
} | |
if (node.left != null) { | |
sumRunner(node.left!, sums, level + 1); | |
} | |
if (node.right != null) { | |
sumRunner(node.right!, sums, level + 1); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment