1
+ 'use strict' ;
2
+ class Node {
3
+ constructor ( data ) {
4
+ this . data = data ;
5
+ this . leftNode = this . rightNode = null ;
6
+ }
7
+ }
8
+
9
+ function findLargestSumOfSubTree ( root , sumObj ) {
10
+ if ( root == null ) return 0 ;
11
+ let currentResult = root . data + findLargestSumOfSubTree ( root . leftNode , sumObj )
12
+ + findLargestSumOfSubTree ( root . rightNode , sumObj ) ;
13
+ if ( currentResult > sumObj . sum ) {
14
+ sumObj . sum = currentResult ;
15
+ }
16
+ return currentResult ;
17
+ }
18
+
19
+
20
+ //level - 1
21
+ let tree = new Node ( - 1 ) ;
22
+
23
+ // level - 2
24
+ tree . leftNode = new Node ( 2 ) ;
25
+ tree . rightNode = new Node ( 3 ) ;
26
+
27
+ // level - 3
28
+ tree . leftNode . leftNode = new Node ( 4 ) ;
29
+ tree . leftNode . rightNode = new Node ( 5 ) ;
30
+
31
+ tree . rightNode . leftNode = new Node ( 6 ) ;
32
+ tree . rightNode . rightNode = new Node ( 7 ) ;
33
+
34
+ // level - 4
35
+ tree . leftNode . leftNode . leftNode = new Node ( 8 ) ;
36
+ tree . leftNode . leftNode . rightNode = new Node ( 9 ) ;
37
+
38
+ tree . leftNode . rightNode . leftNode = new Node ( 10 ) ;
39
+ tree . leftNode . rightNode . rightNode = new Node ( 11 ) ;
40
+
41
+ tree . rightNode . leftNode . leftNode = new Node ( - 12 ) ;
42
+ tree . rightNode . leftNode . rightNode = new Node ( - 13 ) ;
43
+
44
+ tree . rightNode . rightNode . leftNode = new Node ( - 14 ) ;
45
+ tree . rightNode . rightNode . rightNode = new Node ( - 15 ) ;
46
+ // -1
47
+ // / \
48
+ // 2 3
49
+ // / \ / \
50
+ // 4 5 6 7
51
+ // / \ / \ / \ / \
52
+ // 8 9 10 11 -12 -13 -14 -15
53
+ let sumObj = { sum : - Infinity } ;
54
+ findLargestSumOfSubTree ( tree , sumObj ) ;
55
+ console . log ( 'sum of largest sub tree' , sumObj . sum ) ;
0 commit comments