/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isValidBST = function(root) {
return isvalid(root,Infinity,-Infinity);
function isvalid(node,max,min){
if(node===null){
return true;
}
if(node.val>=max || node.val<=min) return false;
return isvalid(node.left,node.val,min) && isvalid(node.right,max,node.val);
}
};
这道题的关键点在于,一个节点的所有左侧的节点,包括左节点的所有右节点,都不能大于它本身的值;所有右侧节点,包括右节点的左节点,也都不能小于它本身的值。
因此,节点(除了跟节点这样的特殊节点)其实上可以取值的范围是一个有限的区间。这就要求我们的递归函数需要3个参数,除了节点本身,还必须包括可以取得的最大值和最小值两个参数。