1
+ // Time O(n) - where n is the number of nodes
2
+ // Space O(h) - average case when the tree is balanced
3
+ // Space O(n) - worst case
1
4
2
- /////////////////////////////////////////////////////////////////////////////////////
3
- // Binary Tree Diamaeter
4
-
5
+ // This is an input class. Do not edit.
5
6
class BinaryTree {
6
7
constructor ( value ) {
7
8
this . value = value ;
@@ -11,28 +12,32 @@ class BinaryTree {
11
12
}
12
13
13
14
class TreeInfo {
14
- constructor ( diameter , height ) {
15
+ constructor ( diameter , heigth ) {
15
16
this . diameter = diameter ;
16
- this . height = height ;
17
+ this . height = heigth ;
17
18
}
18
19
}
19
20
20
21
function binaryTreeDiameter ( tree ) {
21
- return getTreeInfo ( tree ) . diameter ;
22
+ return getTreeInfoHelper ( tree ) . diameter ;
22
23
}
23
24
24
- function getTreeInfo ( tree ) {
25
+ function getTreeInfoHelper ( tree ) {
25
26
if ( tree === null ) return new TreeInfo ( 0 , 0 ) ;
26
27
27
- const leftTreeInfo = getTreeInfo ( tree . left ) ;
28
- const rightTreeInfo = getTreeInfo ( tree . right ) ;
28
+ const leftTreeInfo = getTreeInfoHelper ( tree . left ) ;
29
+ const rightTreeInfo = getTreeInfoHelper ( tree . right ) ;
29
30
30
- const longestPathTroughRoot = leftTreeInfo . height + rightTreeInfo . height ;
31
+ // maxDiameterSoFar = max(leftNode.diameter and right.diameter);
32
+ // largestPossiblePath = left.height + right.height
33
+ // currentDiameter = max (longestPossiblePath and maxDiameterSoFar)
34
+ // currentHeight = 1 + max (left.height, right.height);
31
35
const maxDiameterSoFar = Math . max (
32
36
leftTreeInfo . diameter ,
33
37
rightTreeInfo . diameter
34
38
) ;
35
- const currentDiameter = Math . max ( longestPathTroughRoot , maxDiameterSoFar ) ;
39
+ const largestPossiblePath = leftTreeInfo . height + rightTreeInfo . height ;
40
+ const currentDiameter = Math . max ( maxDiameterSoFar , largestPossiblePath ) ;
36
41
const currentHeight = 1 + Math . max ( leftTreeInfo . height , rightTreeInfo . height ) ;
37
42
38
43
return new TreeInfo ( currentDiameter , currentHeight ) ;
@@ -49,4 +54,3 @@ root.left.right.right.right = new BinaryTree(6);
49
54
root . right = new BinaryTree ( 2 ) ;
50
55
51
56
console . log ( binaryTreeDiameter ( root ) ) ;
52
-
0 commit comments