给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Boolean
*/
function isValidBST($root) {
return $this->_valid($root, null, null);
}
function _valid($node, $lower, $upper) {
if ($node == null) {
return true;
}
if($lower !== null && $node->val <= $lower) {
return false;
}
if($upper !== null && $node->val >= $upper) {
return false;
}
if (!$this->_valid($node->left, $lower, $node->val)) {
return false;
}
if (!$this->_valid($node->right, $node->val, $upper)) {
return false;
}
return true;
}
}