Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
bool isValidBST(TreeNode* root)
{//判断一个二叉树是否是平衡二叉树
//首先平衡二叉树的任一结点的左孩子应该小于父亲结点
//任一结点的右孩子应该大于父亲结点
//任一结点的左子树的最大值应该小于它
//任一结点的右子树的最小值应该大于它
if(NULL==root)
return true;
TreeNode* behind=root->right;
while(behind && behind->left)
behind=behind->left;
TreeNode* ahead=root->left;
while(ahead && ahead->right)
ahead=ahead->right;
//左右子树均不为空的情况
if(behind && ahead)
{
if(behind->val > root->val && ahead->val < root->val)
{
if(root->left->val < root->val && root->right->val > root->val)
return isValidBST(root->left) && isValidBST(root->right);
else
return false;
}
else
return false;
}
//右子树不为空的情况
if(behind)
{
if(behind->val > root->val && root->right->val > root->val)
return isValidBST(root->right);
else
return false;
}
//左子树不为空的情况
if(ahead)
{
if(ahead->val < root->val && root->left->val < root->val)
return isValidBST(root->left);
else
return false;
}
//左右子树均为空的情况
return true;
}