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.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
方法一
class Solution {
public:
TreeNode *left;//记录左边的节点
TreeNode *right;//记录右边的节点
bool check(TreeNode *node){
if(node == NULL) return true;
bool b1 = check(node -> left);
left = right;
right = node;
if(left != NULL && left -> val >= right -> val) return false;//当左边的比右边的大则返回false
bool b2 = check(node -> right);
return b1 && b2;
}
bool isValidBST(TreeNode *root) {
left = NULL;
right = NULL;
return check(root);
}
};
方法二
class Solution {
public:
bool check(TreeNode *node,long long min,long long max){
if(node == NULL) return true;
return (node -> val > min && node -> val < max) && check(node -> left,min,node -> val)
&& check(node -> right,node -> val,max);
}
bool isValidBST(TreeNode *root) {
return check(root,LONG_LONG_MIN,LONG_LONG_MAX);
}
};