描述
给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。
二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。
例:
图1
图2
数据范围:节点数量满足 1 \le n\le 10^4 \1≤n≤10
4
,节点上的值满足 -2^{31} \le val \le 2^{31}-1\−2
31
≤val≤2
31
−1
思路: 观察搜索二叉树的判断方式,和中序遍历的遍历顺序相同,那么在这个过程中是否就可以用val来做比较呢,是可以的。先保存前一个,和当前对比,如果不满足条件,返回false;
代码:
function isValidBST( root ) {
// write code here
if(!root || !root.left && !root.right) return true;
let temp = true;
let sum = -Infinity;
function cd(node){
if(!node) return;
cd(node.left);
if(sum > node.val) temp = false;
sum = sum < node.val ? node.val : sum;
cd(node.right);
}
cd(root);
return temp;
}