1
+ 'use strict' ;
2
+ class Node {
3
+ constructor ( data ) {
4
+ this . data = data ;
5
+ this . leftNode = this . rightNode = null ;
6
+ }
7
+ }
8
+
9
+ function leftBoundary ( root , leftBoundaryNodes ) {
10
+ if ( root == null ) return ;
11
+ if ( root . leftNode ) {
12
+ leftBoundaryNodes . push ( root . data ) ;
13
+ leftBoundary ( root . leftNode , leftBoundaryNodes ) ;
14
+ } else if ( root . rightNode ) {
15
+ leftBoundaryNodes . push ( root . data ) ;
16
+ leftBoundary ( root . rightNode , leftBoundaryNodes ) ;
17
+ }
18
+ }
19
+
20
+ function rightBoundary ( root , rightBoundaryNodes ) {
21
+ if ( root == null ) return ;
22
+ if ( root . rightNode ) {
23
+ rightBoundary ( root . rightNode , rightBoundaryNodes ) ;
24
+ rightBoundaryNodes . push ( root . data ) ;
25
+ } else if ( root . leftNode ) {
26
+ rightBoundary ( root . leftNode , rightBoundaryNodes ) ;
27
+ rightBoundaryNodes . push ( root . data ) ;
28
+ }
29
+ }
30
+
31
+ function leafNodes ( root , leafNodesArr ) {
32
+ if ( root == null ) return null ;
33
+ leafNodes ( root . leftNode , leafNodesArr ) ;
34
+ if ( root . leftNode == null && root . rightNode == null ) {
35
+ leafNodesArr . push ( root . data ) ;
36
+ }
37
+ leafNodes ( root . rightNode , leafNodesArr ) ;
38
+ }
39
+
40
+ function boundaryTraversal ( root ) {
41
+ let leftBoundaryArr = [ ] ;
42
+ let rightBoundaryArr = [ ] ;
43
+ let leafNodesArr = [ ] ;
44
+ leftBoundary ( root . leftNode , leftBoundaryArr )
45
+ leafNodes ( root . leftNode , leafNodesArr ) ;
46
+ leafNodes ( root . rightNode , leafNodesArr ) ;
47
+ rightBoundary ( root . rightNode , rightBoundaryArr ) ;
48
+ console . log ( root . data ) ;
49
+ console . log ( leftBoundaryArr . join ( ',' ) ) ;
50
+ console . log ( leafNodesArr . join ( ',' ) ) ;
51
+ console . log ( rightBoundaryArr . join ( ',' ) ) ;
52
+ }
53
+
54
+
55
+
56
+ //level - 1
57
+ let tree = new Node ( 1 ) ;
58
+
59
+ // level - 2
60
+ tree . leftNode = new Node ( 2 ) ;
61
+ tree . rightNode = new Node ( 3 ) ;
62
+
63
+ // level - 3
64
+ tree . leftNode . leftNode = new Node ( 4 ) ;
65
+ tree . leftNode . rightNode = new Node ( 5 ) ;
66
+
67
+ tree . rightNode . leftNode = new Node ( 6 ) ;
68
+ tree . rightNode . rightNode = new Node ( 7 ) ;
69
+
70
+ // level - 4
71
+ tree . leftNode . leftNode . leftNode = new Node ( 8 ) ;
72
+ tree . leftNode . leftNode . rightNode = new Node ( 9 ) ;
73
+
74
+ tree . leftNode . rightNode . leftNode = new Node ( 10 ) ;
75
+ tree . leftNode . rightNode . rightNode = new Node ( 11 ) ;
76
+
77
+ tree . rightNode . leftNode . leftNode = new Node ( 12 ) ;
78
+ tree . rightNode . leftNode . rightNode = new Node ( 13 ) ;
79
+
80
+ tree . rightNode . rightNode . leftNode = new Node ( 14 ) ;
81
+ tree . rightNode . rightNode . rightNode = new Node ( 15 ) ;
82
+ // 1
83
+ // / \
84
+ // 2 3
85
+ // / \ / \
86
+ // 4 5 6 7
87
+ // / \ / \ / \ / \
88
+ // 8 9 10 11 12 13 14 15
89
+ boundaryTraversal ( tree ) ;
0 commit comments