Skip to content

Instantly share code, notes, and snippets.

@zhoutuo
Created February 24, 2013 00:16
Show Gist options
  • Save zhoutuo/5021973 to your computer and use it in GitHub Desktop.
Save zhoutuo/5021973 to your computer and use it in GitHub Desktop.
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.
/**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
return valid(root, numeric_limits<int>::min(), numeric_limits<int>::max());
}
bool valid(TreeNode* root, int left, int right) {
if(root == NULL) {
return true;
} else if(root->val >= right or root->val <= left) {
return false;
} else {
return valid(root->left, left, root->val) and
valid(root->right, root->val, right);
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment