说明
BST性质
- 左边节点小于当前值
- 右边节点大于当前值
左子树
和右子树
也必须是BST
思路
- 利用BST
中序遍历是升序
的特点 - 用一个变量prev记住前一个节点,如果prev存在并且prev.val>=root.val,则为false,否则为true
- 递归
实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26var isValidBST = function(root) {
if(!root){
return true;
}
/*
1.利用BST中序遍历是升序的特点
*/
let prev = null;
function dfsHelper(root){
if(!root){
return true;
}
let leftRe = dfsHelper(root.left);
if(!leftRe){
return false;
}
/** 处理当前节点 */
if(prev && prev.val >= root.val){
return false;
}
prev = root;
return dfsHelper(root.right);
}
return dfsHelper(root);
};