@@ -65,6 +65,7 @@ describe('Binary Search Tree', () => {
6565 xdescribe ( '#remove' , ( ) => {
6666 it ( 'should remove value 2' , ( ) => {
6767 expect ( bst . remove ( 2 ) ) . toBe ( true ) ;
68+ expect ( bst . toArray ( ) ) . toEqual ( [ 10 , undefined , 30 , undefined , undefined , 15 , 40 ] ) ;
6869 expect ( root . left ) . toBe ( undefined ) ;
6970 } ) ;
7071
@@ -73,6 +74,77 @@ describe('Binary Search Tree', () => {
7374 } ) ;
7475 } ) ;
7576
77+ describe ( '#bfs' , ( ) => {
78+ it ( 'should visit nodes on BFS order using iterator' , ( ) => {
79+ const bfs = bst . bfs ( ) ;
80+ expect ( bfs . next ( ) . value ) . toBe ( root ) ; // 10
81+ expect ( bfs . next ( ) . value ) . toBe ( n2 ) ;
82+ expect ( bfs . next ( ) . value . value ) . toBe ( 30 ) ;
83+ expect ( bfs . next ( ) . value . value ) . toBe ( 15 ) ;
84+ expect ( bfs . next ( ) ) . toMatchObject ( { value : { value : 40 } , done : false } ) ;
85+ expect ( bfs . next ( ) . done ) . toBe ( true ) ;
86+ } ) ;
87+
88+ 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 ] ) ;
92+ } ) ;
93+ } ) ;
94+
95+ describe ( '#dfs' , ( ) => {
96+ it ( 'should visit nodes on dfs order using iterator' , ( ) => {
97+ const dfs = bst . dfs ( ) ;
98+ expect ( dfs . next ( ) . value ) . toBe ( root ) ; // 10
99+ expect ( dfs . next ( ) . value . value ) . toBe ( 30 ) ;
100+ expect ( dfs . next ( ) ) . toMatchObject ( { value : { value : 40 } , done : false } ) ;
101+ expect ( dfs . next ( ) . value . value ) . toBe ( 15 ) ;
102+ expect ( dfs . next ( ) . value ) . toBe ( n2 ) ;
103+ expect ( dfs . next ( ) . done ) . toBe ( true ) ;
104+ } ) ;
105+
106+ it ( 'should generate an array from dfs' , ( ) => {
107+ const nodes = Array . from ( bst . dfs ( ) ) ;
108+ const values = nodes . map ( node => node . value ) ;
109+ expect ( values ) . toEqual ( [ 10 , 30 , 40 , 15 , 2 ] ) ;
110+ } ) ;
111+ } ) ;
112+
113+ 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+
125+ 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+ } ) ;
130+ } ) ;
131+
132+ describe ( '#preOrderTraversal' , ( ) => {
133+ it ( 'should generate an array from preOrderTraversal' , ( ) => {
134+ const nodes = Array . from ( bst . preOrderTraversal ( ) ) ;
135+ const values = nodes . map ( node => node . value ) ;
136+ expect ( values ) . toEqual ( [ 10 , 2 , 15 , 30 , 40 ] ) ;
137+ } ) ;
138+ } ) ;
139+
140+ describe ( '#postOrderTraversal' , ( ) => {
141+ it ( 'should generate an array from postOrderTraversal' , ( ) => {
142+ const nodes = Array . from ( bst . postOrderTraversal ( ) ) ;
143+ const values = nodes . map ( node => node . value ) ;
144+ expect ( values ) . toEqual ( [ 2 , 15 , 30 , 40 , 10 ] ) ;
145+ } ) ;
146+ } ) ;
147+
76148 describe ( '#toArray' , ( ) => {
77149 it ( 'should serialize the tree as an array' , ( ) => {
78150 expect ( bst . toArray ( ) ) . toEqual ( [ 10 , 2 , 30 , undefined , undefined , 15 , 40 ,
0 commit comments