Description
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.
Example 1:
2
/ \
1 3
Binary tree[2,1,3]
, return true.
Example 2:
1
/ \
2 3
Binary tree [1,2,3]
, return false.
Solution
二叉搜索树的定义为:或者是一棵空树,或者是具有下列性质的 二叉树 : 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 其左、右子树也分别为二叉排序树 。因此直接采用遍历判断的方法,每次找到该节点左子树的最大值和右子树的最小值与当前节点比较,不满足条件则返回判断值false
,满足再判断左右子树是否都满足条件。
/**
* Definition for binary tree
* struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x): val(x), left(NULL), right(NULL) {}
};
*/
class Solution {
public:
bool isValidBST(TreeNode *root) {
if(!root) return true;
if(root->left){
TreeNode *p = root->left;
while(p->right) p = p->right;
if(p->val>=root->val) return false;
}
if(root->right){
TreeNode *p = root->right;
while(p->left) p = p->left;
if(p->val<=root->val) return false;
}
return isValidBST(root->left)&&isValidBST(root->right);
}
};