1
+ /**
2
+ * Definition for a binary tree node.
3
+ * class TreeNode {
4
+ * val: number
5
+ * left: TreeNode | null
6
+ * right: TreeNode | null
7
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8
+ * this.val = (val===undefined ? 0 : val)
9
+ * this.left = (left===undefined ? null : left)
10
+ * this.right = (right===undefined ? null : right)
11
+ * }
12
+ * }
13
+ */
14
+
15
+ export class TreeNode {
16
+ val : number
17
+ left : TreeNode | null
18
+ right : TreeNode | null
19
+ constructor ( val ?: number , left ?: TreeNode | null , right ?: TreeNode | null ) {
20
+ this . val = ( val === undefined ? 0 : val )
21
+ this . left = ( left === undefined ? null : left )
22
+ this . right = ( right === undefined ? null : right )
23
+ }
24
+
25
+ }
26
+
27
+ export function isValidBST ( root : TreeNode | null ) : boolean {
28
+ if ( root == null ) return true
29
+ let currentNode : any = root ;
30
+ let list = [ ]
31
+ let queue = [ ]
32
+ queue . push ( currentNode )
33
+
34
+ while ( queue . length > 0 ) {
35
+ console . log ( currentNode . val ) ;
36
+ currentNode = queue . shift ( ) ; // O(n) => Queue để lưu trữ các node ở phía tước
37
+ list . push ( currentNode . val ) // O(1)
38
+ if ( currentNode . left ) {
39
+ if ( currentNode . val <= currentNode . left . val ) return false
40
+ queue . push ( currentNode . left ) // O(1)
41
+ }
42
+ if ( currentNode . right ) {
43
+ if ( currentNode . val >= currentNode . right . val ) return false
44
+ queue . push ( currentNode . right ) // O(1)
45
+ }
46
+ }
47
+
48
+ return true
49
+ } ;
50
+
51
+ const tree = new TreeNode ( 2 , new TreeNode ( 1 ) , new TreeNode ( 3 ) ) ;
52
+ const tree2 = new TreeNode ( 5 , new TreeNode ( 1 , null , null ) , new TreeNode ( 4 , new TreeNode ( 3 ) , new TreeNode ( 6 ) ) ) ;
53
+ const tree3 = new TreeNode ( 5 , new TreeNode ( 4 , null , null ) , new TreeNode ( 6 , new TreeNode ( 3 ) , new TreeNode ( 7 ) ) ) ; // Cây không cân bằng. Trường hợp này giải quyết như thế nào ?
54
+
55
+
56
+ console . log ( tree ) ;
57
+ console . log ( isValidBST ( tree ) ) ;
58
+ console . log ( isValidBST ( tree2 ) ) ;
0 commit comments