@@ -42,24 +42,28 @@ describe('Binary Search Tree', () => {
4242 } ) ;
4343
4444 describe ( 'when has items' , ( ) => {
45- let n5 ;
4645 let root ;
46+ let n3 ;
47+ let n4 ;
48+ let n5 ;
49+ let n30 ;
50+ let n40 ;
4751
4852 beforeEach ( ( ) => {
49- // 10
50- // / \
51- // 5 30
52- // / / \
53- // 4 15 40
54- // /
55- // 3
53+ // 10
54+ // / \
55+ // 5 30
56+ // / / \
57+ // 4 15 40
58+ // / \
59+ // 3 (4.5)
5660 root = bst . add ( 10 ) ;
5761 n5 = bst . add ( 5 ) ;
58- bst . add ( 30 ) ;
59- bst . add ( 40 ) ;
62+ n30 = bst . add ( 30 ) ;
63+ n40 = bst . add ( 40 ) ;
6064 bst . add ( 15 ) ;
61- bst . add ( 4 ) ;
62- bst . add ( 3 ) ;
65+ n4 = bst . add ( 4 ) ;
66+ n3 = bst . add ( 3 ) ;
6367 } ) ;
6468
6569 describe ( '#find' , ( ) => {
@@ -72,17 +76,41 @@ describe('Binary Search Tree', () => {
7276 } ) ;
7377 } ) ;
7478
75- xdescribe ( '#remove' , ( ) => {
76- 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 ] ) ;
79- expect ( bst . remove ( 2 ) ) . toBe ( true ) ;
80- expect ( Array . from ( bst . preOrderTraversal ( ) ) . map ( n => n . value ) ) . toEqual ( [ 10 , 30 , 15 , 40 ] ) ;
81- expect ( root . left ) . toBe ( undefined ) ;
79+ describe ( '#remove' , ( ) => {
80+ it ( 'should remove a left leaf node' , ( ) => {
81+ expect ( n4 . left ) . toBe ( n3 ) ;
82+ bst . remove ( 3 ) ;
83+ expect ( n4 . left ) . toBe ( undefined ) ;
84+ } ) ;
85+
86+ it ( 'should remove a right leaf node' , ( ) => {
87+ expect ( n30 . right ) . toBe ( n40 ) ;
88+ bst . remove ( 40 ) ;
89+ expect ( n30 . right ) . toBe ( undefined ) ;
90+ } ) ;
91+
92+ it ( 'should remove a parent with two descents on the right' , ( ) => {
93+ expect ( root . left . value ) . toBe ( 5 ) ;
94+ expect ( root . right . value ) . toBe ( 30 ) ;
95+
96+ bst . remove ( 30 ) ;
97+
98+ expect ( root . left . value ) . toBe ( 5 ) ;
99+ expect ( root . right . value ) . toBe ( 40 ) ;
100+ } ) ;
101+
102+ it ( 'should remove a parent with two descents on the left' , ( ) => {
103+ bst . add ( 4.5 ) ;
104+ expect ( n5 . left . value ) . toBe ( 4 ) ;
105+ expect ( n5 . left . right . value ) . toBe ( 4.5 ) ;
106+
107+ bst . remove ( 4 ) ;
108+
109+ expect ( n5 . left . value ) . toBe ( 4.5 ) ;
82110 } ) ;
83111
84- xit ( 'should return false for removing unexisting value 20 ' , ( ) => {
85- expect ( bst . remove ( 20 ) ) . toBe ( false ) ;
112+ it ( 'should return false when it does not exist ' , ( ) => {
113+ expect ( bst . remove ( 4.5 ) ) . toBe ( false ) ;
86114 } ) ;
87115 } ) ;
88116
0 commit comments