File tree Expand file tree Collapse file tree 3 files changed +104
-0
lines changed Expand file tree Collapse file tree 3 files changed +104
-0
lines changed Original file line number Diff line number Diff line change @@ -10,6 +10,22 @@ class Node {
1010 this . visited = false ;
1111 }
1212
13+ get left ( ) {
14+ return this . adjacents [ 0 ] ;
15+ }
16+
17+ set left ( value ) {
18+ this . adjacents [ 0 ] = value ;
19+ }
20+
21+ get right ( ) {
22+ return this . adjacents [ 1 ] ;
23+ }
24+
25+ set right ( value ) {
26+ this . adjacents [ 1 ] = value ;
27+ }
28+
1329 toArray ( ) {
1430 const string = [ ] ;
1531 const queue = new Queue ( ) ;
Original file line number Diff line number Diff line change 1+ /**
2+ * DFS, where the left be in desc while the right should be asc
3+ * @param node
4+ * @returns {boolean }
5+ */
6+ function isBinarySearchTree ( node ) {
7+ if ( ! node ) return true ;
8+
9+ const parent = node . data ;
10+ let isBST = true ;
11+
12+ if ( node . left ) {
13+ const left = node . left . data ;
14+ isBST = isBST && left < parent ;
15+ }
16+
17+ if ( node . right ) {
18+ const right = node . right . data ;
19+ isBST = isBST && right > parent ;
20+ }
21+
22+ return isBST && isBinarySearchTree ( node . left ) && isBinarySearchTree ( node . right ) ;
23+ }
24+
25+ module . exports = isBinarySearchTree ;
Original file line number Diff line number Diff line change 1+ const expect = require ( 'chai' ) . expect ;
2+ const Node = require ( './graph' ) . Node ;
3+ const isBinarySearchTree = require ( './is-binary-search-tree' ) ;
4+
5+ describe ( 'Tree: is binary tree search' , function ( ) {
6+
7+ it ( 'should work with valid data' , function ( ) {
8+ let bt = new Node ( 4 ) ;
9+ bt . left = new Node ( 2 ) ;
10+ bt . right = new Node ( 5 ) ;
11+ expect ( isBinarySearchTree ( bt ) ) . to . equal ( true ) ;
12+ } ) ;
13+
14+ it ( 'should false with left > parent' , function ( ) {
15+ let bt = new Node ( 4 ) ;
16+ bt . left = new Node ( 6 ) ;
17+ bt . right = new Node ( 5 ) ;
18+ expect ( isBinarySearchTree ( bt ) ) . to . equal ( false ) ;
19+ } ) ;
20+
21+ it ( 'should false with parent > right' , function ( ) {
22+ let bt = new Node ( 4 ) ;
23+ bt . left = new Node ( 2 ) ;
24+ bt . right = new Node ( 3 ) ;
25+ expect ( isBinarySearchTree ( bt ) ) . to . equal ( false ) ;
26+ } ) ;
27+
28+ it ( 'should work with valid data' , function ( ) {
29+ let
30+ a = new Node ( 'a' ) ,
31+ b = new Node ( 'b' ) ,
32+ c = new Node ( 'c' ) ,
33+ d = new Node ( 'd' ) ,
34+ e = new Node ( 'e' ) ,
35+ f = new Node ( 'f' ) ,
36+ g = new Node ( 'g' ) ;
37+
38+ d . left = c ;
39+ c . left = b ;
40+
41+ d . right = e ;
42+ e . right = f ;
43+ f . right = g ;
44+
45+ expect ( isBinarySearchTree ( d ) ) . to . equal ( true ) ;
46+ } ) ;
47+
48+ it ( 'should return false when the left child is bigger than root' , function ( ) {
49+ let
50+ n10 = new Node ( 10 ) ,
51+ n20 = new Node ( 20 ) ,
52+ n25 = new Node ( 25 ) ,
53+ n30 = new Node ( 30 ) ;
54+
55+ n20 . left = n10 ;
56+ n20 . right = n30 ;
57+
58+ n10 . right = n25 ;
59+
60+ expect ( isBinarySearchTree ( n20 ) ) . to . equal ( false ) ;
61+ } ) ;
62+
63+ } ) ;
You can’t perform that action at this time.
0 commit comments