1
- function createNode ( key ) {
2
- const children = [ ]
1
+ // Binary Trees and Tree Traversal
3
2
4
- return {
5
- key,
6
- children,
7
- addChild ( childKey ) {
8
- const childNode = createNode ( childKey )
9
- children . push ( childNode )
10
- return childNode
11
- }
12
- }
13
- }
3
+ // Binary trees are trees whose nodes can only have up to two children
14
4
15
5
function createBinaryNode ( key ) {
16
6
return {
@@ -30,71 +20,43 @@ function createBinaryNode(key) {
30
20
}
31
21
}
32
22
33
- function createTree ( rootKey ) {
34
- const root = createNode ( rootKey )
35
-
36
- return {
37
- root,
38
- print ( ) {
39
- let result = root . key
40
-
41
- function traverse ( node , visitFn ) {
42
- if ( node . children . length ) {
43
- node . children . forEach ( visitFn )
44
- node . children . forEach ( n => traverse ( n , visitFn ) )
45
- }
46
- }
47
-
48
- function addKeyToResult ( node ) {
49
- result += ` => ${ node . key } `
50
- }
51
-
52
- traverse ( root , addKeyToResult )
53
-
54
- return result
23
+ const TRAVERSALS = {
24
+ IN_ORDER : ( node , visitFn ) => {
25
+ if ( node !== null ) {
26
+ TRAVERSALS . IN_ORDER ( node . left , visitFn )
27
+ visitFn ( node )
28
+ TRAVERSALS . IN_ORDER ( node . right , visitFn )
29
+ }
30
+ } ,
31
+ PRE_ORDER : ( node , visitFn ) => {
32
+ if ( node !== null ) {
33
+ visitFn ( node )
34
+ TRAVERSALS . PRE_ORDER ( node . left , visitFn )
35
+ TRAVERSALS . PRE_ORDER ( node . right , visitFn )
36
+ }
37
+ } ,
38
+ POST_ORDER : ( node , visitFn ) => {
39
+ if ( node !== null ) {
40
+ TRAVERSALS . POST_ORDER ( node . left , visitFn )
41
+ TRAVERSALS . POST_ORDER ( node . right , visitFn )
42
+ visitFn ( node )
55
43
}
56
44
}
57
45
}
58
46
59
47
function createBinaryTree ( rootKey ) {
60
48
const root = createBinaryNode ( rootKey )
61
49
62
- const TRAVERSALS = {
63
- IN_ORDER : ( node , visitFn ) => {
64
- if ( node !== null ) {
65
- TRAVERSALS . IN_ORDER ( node . left , visitFn )
66
- visitFn ( node )
67
- TRAVERSALS . IN_ORDER ( node . right , visitFn )
68
- }
69
- } ,
70
-
71
- PRE_ORDER : ( node , visitFn ) => {
72
- if ( node !== null ) {
73
- visitFn ( node )
74
- TRAVERSALS . PRE_ORDER ( node . left , visitFn )
75
- TRAVERSALS . PRE_ORDER ( node . right , visitFn )
76
- }
77
- } ,
78
-
79
- POST_ORDER : ( node , visitFn ) => {
80
- if ( node !== null ) {
81
- TRAVERSALS . POST_ORDER ( node . left , visitFn )
82
- TRAVERSALS . POST_ORDER ( node . right , visitFn )
83
- visitFn ( node )
84
- }
85
- }
86
- }
87
-
88
50
return {
89
51
root,
90
- print ( orderType = 'IN_ORDER' ) {
52
+ print ( traversalType = 'IN_ORDER' ) {
91
53
let result = ''
92
54
93
- const visitFn = node => {
55
+ const visit = node => {
94
56
result += result . length === 0 ? node . key : ` => ${ node . key } `
95
57
}
96
58
97
- TRAVERSALS [ orderType ] ( this . root , visitFn )
59
+ TRAVERSALS [ traversalType ] ( this . root , visit )
98
60
99
61
return result
100
62
}
@@ -111,13 +73,11 @@ const g = c.addRight('g')
111
73
const h = d . addLeft ( 'h' )
112
74
const i = d . addRight ( 'i' )
113
75
114
- console . log ( " IN_ORDER: " , tree . print ( ) )
76
+ console . log ( ' IN_ORDER: ' , tree . print ( ) )
115
77
116
- console . log ( " PRE_ORDER: " , tree . print ( 'PRE_ORDER' ) )
78
+ console . log ( ' PRE_ORDER: ' , tree . print ( 'PRE_ORDER' ) )
117
79
118
- console . log ( " POST_ORDER: " , tree . print ( 'POST_ORDER' ) )
80
+ console . log ( ' POST_ORDER: ' , tree . print ( 'POST_ORDER' ) )
119
81
120
82
exports . createBinaryNode = createBinaryNode
121
83
exports . createBinaryTree = createBinaryTree
122
- exports . createNode = createNode
123
- exports . createTree = createTree
0 commit comments