Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Tree {
- constructor(value = 0){
- this.value = value;
- this.visited = false;
- this.left = null;
- this.right = null;
- this.parent = null;
- }
- }
- // Let's construct a test case with the edge
- // case of having identical sums
- var root = new Tree(10);
- var left = new Tree(5);
- left.parent = root;
- var right = new Tree(16);
- right.parent = root;
- var leftleft = new Tree(3);
- leftleft.parent = left;
- var leftright = new Tree(8);
- leftright.parent = left;
- var rightleft = new Tree(11);
- rightleft.parent = right;
- right.left = rightleft;
- root.left = left;
- root.right = right;
- left.left = leftleft;
- left.right = leftright;
- var largestSum = (tree, level) => {
- var sums = [];
- function findSums(tree, currentLevel, currentTotal){
- // if (tree.visited === true
- // && tree.left !== null && tree.left.visited === true
- // && tree.right !== null && tree.right.visited === true){
- // if (tree.parent !== null){
- // findSums(tree.parent, currentLevel - 1, currentTotal - tree.value);
- // }
- // }
- console.log('visiting', tree);
- tree.visited = true;
- var newTotal = tree.value + currentTotal;
- if (tree.parent === null
- && (tree.left === null || tree.left.visited === true)
- && (tree.right === null || tree.right.visited === true)
- ){
- return;
- }
- if (currentLevel === level){
- sums.push(newTotal);
- // go back up the tree
- if (tree.parent !== null){
- return findSums(tree.parent, currentLevel - 1, newTotal - tree.value - tree.parent.value);
- }
- }
- if (tree.left === null && tree.right === null){
- if (tree.parent !== null){
- findSums(tree.parent, currentLevel - 1, newTotal - tree.value - tree.parent.value);
- } else {
- return;
- }
- } else {
- if (tree.left !== null && tree.left.visited === false){
- findSums(tree.left, currentLevel + 1, newTotal);
- }
- if (tree.right !== null && tree.right.visited === false){
- findSums(tree.right, currentLevel + 1, newTotal);
- }
- // else if (tree.parent !== null){
- // findSums(tree.parent, currentLevel - 1, newTotal - tree.value - tree.parent.value);
- // }
- }
- }
- // find sums
- findSums(tree, 0, 0);
- return Math.max.apply(null, sums);
- }
Add Comment
Please, Sign In to add comment