Guest User

Untitled

a guest
Feb 21st, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. class Tree {
  2. constructor(value = 0){
  3. this.value = value;
  4. this.visited = false;
  5. this.left = null;
  6. this.right = null;
  7. this.parent = null;
  8. }
  9. }
  10.  
  11. // Let's construct a test case with the edge
  12. // case of having identical sums
  13.  
  14. var root = new Tree(10);
  15. var left = new Tree(5);
  16. left.parent = root;
  17. var right = new Tree(16);
  18. right.parent = root;
  19. var leftleft = new Tree(3);
  20. leftleft.parent = left;
  21. var leftright = new Tree(8);
  22. leftright.parent = left;
  23.  
  24. var rightleft = new Tree(11);
  25. rightleft.parent = right;
  26. right.left = rightleft;
  27.  
  28. root.left = left;
  29. root.right = right;
  30. left.left = leftleft;
  31. left.right = leftright;
  32.  
  33.  
  34. var largestSum = (tree, level) => {
  35. var sums = [];
  36.  
  37. function findSums(tree, currentLevel, currentTotal){
  38. // if (tree.visited === true
  39. // && tree.left !== null && tree.left.visited === true
  40. // && tree.right !== null && tree.right.visited === true){
  41. // if (tree.parent !== null){
  42. // findSums(tree.parent, currentLevel - 1, currentTotal - tree.value);
  43. // }
  44. // }
  45.  
  46. console.log('visiting', tree);
  47.  
  48. tree.visited = true;
  49. var newTotal = tree.value + currentTotal;
  50.  
  51. if (tree.parent === null
  52. && (tree.left === null || tree.left.visited === true)
  53. && (tree.right === null || tree.right.visited === true)
  54. ){
  55. return;
  56. }
  57.  
  58. if (currentLevel === level){
  59. sums.push(newTotal);
  60. // go back up the tree
  61. if (tree.parent !== null){
  62. return findSums(tree.parent, currentLevel - 1, newTotal - tree.value - tree.parent.value);
  63. }
  64. }
  65.  
  66. if (tree.left === null && tree.right === null){
  67. if (tree.parent !== null){
  68. findSums(tree.parent, currentLevel - 1, newTotal - tree.value - tree.parent.value);
  69. } else {
  70. return;
  71. }
  72. } else {
  73. if (tree.left !== null && tree.left.visited === false){
  74. findSums(tree.left, currentLevel + 1, newTotal);
  75. }
  76.  
  77. if (tree.right !== null && tree.right.visited === false){
  78. findSums(tree.right, currentLevel + 1, newTotal);
  79. }
  80.  
  81. // else if (tree.parent !== null){
  82. // findSums(tree.parent, currentLevel - 1, newTotal - tree.value - tree.parent.value);
  83. // }
  84. }
  85. }
  86.  
  87.  
  88. // find sums
  89. findSums(tree, 0, 0);
  90. return Math.max.apply(null, sums);
  91. }
Add Comment
Please, Sign In to add comment