-
左子节点的值必须小于当前节点的值,因此它的上限为当前节点的值。
-
右子节点的值必须大于当前节点的值,因此它的下限为当前节点的值。
这里最主要的是 isValid 里面的 return,这里的逻辑判断
如果是进入左子树,那么就需要判断 左子树.val 和它的 父节点.val 的大小,因为是父节点,肯定需要比左子树大,同理于右子树。
还有一个地方,写代码的时候需要注意,这里的 if 判断中, 不能直接用 (min && node.val <= min) 主要是遇到 min = 0 的时候,这里会判 false。
var isValidBST = function (root) {
var isValid = function (node, min, max) {
if (!node) return true
if (min !== null && node.val <= min) return false
if (max !== null && node.val >= max) return false
return isValid(node.left, min, node.val) && isValid(node.right, node.val, max)
}
return isValid(root, null, null)
};Ï