@@ -2,6 +2,7 @@ const BinarySearchTree = require('./binary-search-tree');
22
33describe ( 'Binary Search Tree' , ( ) => {
44 let bst ;
5+ const getValues = treeGenerator => Array . from ( treeGenerator ) . map ( node => node . value ) ;
56
67 beforeEach ( ( ) => {
78 bst = new BinarySearchTree ( ) ;
@@ -41,20 +42,29 @@ describe('Binary Search Tree', () => {
4142 } ) ;
4243
4344 describe ( 'when has items' , ( ) => {
44- let n2 ;
45+ let n5 ;
4546 let root ;
4647
4748 beforeEach ( ( ) => {
49+ // 10
50+ // / \
51+ // 5 30
52+ // / / \
53+ // 4 15 40
54+ // /
55+ // 3
4856 root = bst . add ( 10 ) ;
49- n2 = bst . add ( 2 ) ;
57+ n5 = bst . add ( 5 ) ;
5058 bst . add ( 30 ) ;
5159 bst . add ( 40 ) ;
5260 bst . add ( 15 ) ;
61+ bst . add ( 4 ) ;
62+ bst . add ( 3 ) ;
5363 } ) ;
5464
5565 describe ( '#find' , ( ) => {
5666 it ( 'should find the value 2' , ( ) => {
57- expect ( bst . find ( 2 ) ) . toBe ( n2 ) ;
67+ expect ( bst . find ( 5 ) ) . toBe ( n5 ) ;
5868 } ) ;
5969
6070 it ( 'should NOT find the value 20' , ( ) => {
@@ -64,12 +74,14 @@ describe('Binary Search Tree', () => {
6474
6575 xdescribe ( '#remove' , ( ) => {
6676 it ( 'should remove value 2' , ( ) => {
77+ expect ( bst . toArray ( ) ) . toEqual ( [ 10 , 2 , 30 , undefined , undefined , 15 , 40 , undefined , undefined , undefined , undefined ] ) ;
78+ expect ( Array . from ( bst . preOrderTraversal ( ) ) . map ( n => n . value ) ) . toEqual ( [ 10 , 2 , 30 , 15 , 40 ] ) ;
6779 expect ( bst . remove ( 2 ) ) . toBe ( true ) ;
68- expect ( bst . toArray ( ) ) . toEqual ( [ 10 , undefined , 30 , undefined , undefined , 15 , 40 ] ) ;
80+ expect ( Array . from ( bst . preOrderTraversal ( ) ) . map ( n => n . value ) ) . toEqual ( [ 10 , 30 , 15 , 40 ] ) ;
6981 expect ( root . left ) . toBe ( undefined ) ;
7082 } ) ;
7183
72- it ( 'should return false for removing unexisting value 20' , ( ) => {
84+ xit ( 'should return false for removing unexisting value 20' , ( ) => {
7385 expect ( bst . remove ( 20 ) ) . toBe ( false ) ;
7486 } ) ;
7587 } ) ;
@@ -78,83 +90,66 @@ describe('Binary Search Tree', () => {
7890 it ( 'should visit nodes on BFS order using iterator' , ( ) => {
7991 const bfs = bst . bfs ( ) ;
8092 expect ( bfs . next ( ) . value ) . toBe ( root ) ; // 10
81- expect ( bfs . next ( ) . value ) . toBe ( n2 ) ;
93+ expect ( bfs . next ( ) . value ) . toBe ( n5 ) ;
8294 expect ( bfs . next ( ) . value . value ) . toBe ( 30 ) ;
95+ expect ( bfs . next ( ) . value . value ) . toBe ( 4 ) ;
8396 expect ( bfs . next ( ) . value . value ) . toBe ( 15 ) ;
8497 expect ( bfs . next ( ) ) . toMatchObject ( { value : { value : 40 } , done : false } ) ;
98+ expect ( bfs . next ( ) ) . toMatchObject ( { value : { value : 3 } , done : false } ) ;
8599 expect ( bfs . next ( ) . done ) . toBe ( true ) ;
86100 } ) ;
87101
88102 it ( 'should generate an array from bfs' , ( ) => {
89- const nodes = Array . from ( bst . bfs ( ) ) ;
90- const values = nodes . map ( node => node . value ) ;
91- expect ( values ) . toEqual ( [ 10 , 2 , 30 , 15 , 40 ] ) ;
103+ expect ( getValues ( bst . bfs ( ) ) ) . toEqual ( [ 10 , 5 , 30 , 4 , 15 , 40 , 3 ] ) ;
92104 } ) ;
93105 } ) ;
94106
95107 describe ( '#dfs' , ( ) => {
96108 it ( 'should visit nodes on dfs order using iterator' , ( ) => {
97109 const dfs = bst . dfs ( ) ;
98110 expect ( dfs . next ( ) . value ) . toBe ( root ) ; // 10
111+ expect ( dfs . next ( ) . value ) . toBe ( n5 ) ;
112+ expect ( dfs . next ( ) . value . value ) . toBe ( 4 ) ;
113+ expect ( dfs . next ( ) . value . value ) . toBe ( 3 ) ;
99114 expect ( dfs . next ( ) . value . value ) . toBe ( 30 ) ;
100- expect ( dfs . next ( ) ) . toMatchObject ( { value : { value : 40 } , done : false } ) ;
101115 expect ( dfs . next ( ) . value . value ) . toBe ( 15 ) ;
102- expect ( dfs . next ( ) . value ) . toBe ( n2 ) ;
116+ expect ( dfs . next ( ) ) . toMatchObject ( { value : { value : 40 } , done : false } ) ;
103117 expect ( dfs . next ( ) . done ) . toBe ( true ) ;
104118 } ) ;
105119
106120 it ( 'should generate an array from dfs' , ( ) => {
107121 const nodes = Array . from ( bst . dfs ( ) ) ;
108122 const values = nodes . map ( node => node . value ) ;
109- expect ( values ) . toEqual ( [ 10 , 30 , 40 , 15 , 2 ] ) ;
123+ expect ( values ) . toEqual ( [ 10 , 5 , 4 , 3 , 30 , 15 , 40 ] ) ;
110124 } ) ;
111125 } ) ;
112126
113127 describe ( '#inOrderTraversal' , ( ) => {
114- it ( 'should visit nodes on order using iterator' , ( ) => {
115- const ordered = bst . inOrderTraversal ( ) ;
116-
117- expect ( ordered . next ( ) . value ) . toBe ( n2 ) ;
118- expect ( ordered . next ( ) . value ) . toBe ( root ) ; // 10
119- expect ( ordered . next ( ) . value . value ) . toBe ( 15 ) ;
120- expect ( ordered . next ( ) . value . value ) . toBe ( 30 ) ;
121- expect ( ordered . next ( ) ) . toMatchObject ( { value : { value : 40 } , done : false } ) ;
122- expect ( ordered . next ( ) . done ) . toBe ( true ) ;
123- } ) ;
124-
125128 it ( 'should generate an array' , ( ) => {
126- const nodes = Array . from ( bst . inOrderTraversal ( ) ) ;
127- const values = nodes . map ( node => node . value ) ;
128- expect ( values ) . toEqual ( [ 2 , 10 , 15 , 30 , 40 ] ) ;
129+ expect ( getValues ( bst . inOrderTraversal ( ) ) ) . toEqual ( [ 3 , 4 , 5 , 10 , 15 , 30 , 40 ] ) ;
129130 } ) ;
130131 } ) ;
131132
132133 describe ( '#preOrderTraversal' , ( ) => {
133134 it ( 'should generate an array from preOrderTraversal' , ( ) => {
134135 const nodes = Array . from ( bst . preOrderTraversal ( ) ) ;
135136 const values = nodes . map ( node => node . value ) ;
136- expect ( values ) . toEqual ( [ 10 , 2 , 15 , 30 , 40 ] ) ;
137+ expect ( values ) . toEqual ( [ 10 , 5 , 4 , 3 , 30 , 15 , 40 ] ) ;
137138 } ) ;
138139 } ) ;
139140
140141 describe ( '#postOrderTraversal' , ( ) => {
141142 it ( 'should generate an array from postOrderTraversal' , ( ) => {
142143 const nodes = Array . from ( bst . postOrderTraversal ( ) ) ;
143144 const values = nodes . map ( node => node . value ) ;
144- expect ( values ) . toEqual ( [ 2 , 15 , 30 , 40 , 10 ] ) ;
145+ expect ( values ) . toEqual ( [ 3 , 4 , 5 , 15 , 40 , 30 , 10 ] ) ;
145146 } ) ;
146147 } ) ;
147148
148149 describe ( '#toArray' , ( ) => {
149150 it ( 'should serialize the tree as an array' , ( ) => {
150- expect ( bst . toArray ( ) ) . toEqual ( [ 10 , 2 , 30 , undefined , undefined , 15 , 40 ,
151- undefined , undefined , undefined , undefined ] ) ;
152- } ) ;
153-
154- it ( 'should serialize new tree' , ( ) => {
155- bst . add ( 3 ) ;
156- expect ( bst . toArray ( ) ) . toEqual ( [ 10 , 2 , 30 , undefined , 3 , 15 , 40 ,
157- undefined , undefined , undefined , undefined , undefined , undefined ] ) ;
151+ expect ( bst . toArray ( ) ) . toEqual ( [ 10 , 5 , 30 , 4 , undefined , 15 , 40 , 3 ,
152+ undefined , undefined , undefined , undefined , undefined , undefined , undefined ] ) ;
158153 } ) ;
159154 } ) ;
160155 } ) ;
0 commit comments