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