[leetcode] Validate Binary Search Tree
2013-08-19 14:58
507 查看
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
read more on how binary tree is serialized on OJ.
class Solution {
public:
bool isValidBST(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(root==NULL)
return true;
TreeNode *lm,*rm;
lm=leftmost(root);
rm=rightmost(root);
if(root->left!=NULL && root->left->val>=root->val || lm && lm->val >= root->val)
return false;
if(root->right!=NULL && root->right->val<=root->val || rm && rm->val<=root->val)
return false;
return isValidBST(root->left)&&isValidBST(root->right);
}
TreeNode* rightmost(TreeNode *root){
if(root->right)
root=root->right;
else
return NULL;
while(root->left)
root=root->left;
return root;
}
TreeNode* leftmost(TreeNode *root){
if(root->left)
root=root->left;
else
return NULL;
while(root->right)
root=root->right;
return root;
}
};
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:
bool isValidBST(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(root==NULL)
return true;
TreeNode *lm,*rm;
lm=leftmost(root);
rm=rightmost(root);
if(root->left!=NULL && root->left->val>=root->val || lm && lm->val >= root->val)
return false;
if(root->right!=NULL && root->right->val<=root->val || rm && rm->val<=root->val)
return false;
return isValidBST(root->left)&&isValidBST(root->right);
}
TreeNode* rightmost(TreeNode *root){
if(root->right)
root=root->right;
else
return NULL;
while(root->left)
root=root->left;
return root;
}
TreeNode* leftmost(TreeNode *root){
if(root->left)
root=root->left;
else
return NULL;
while(root->right)
root=root->right;
return root;
}
};
相关文章推荐
- leetcode || 98、Validate Binary Search Tree
- 【LeetCode】Validate Binary Search Tree 二叉查找树的判断
- [leetcode]Validate Binary Search Tree
- [Leetcode]Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree(判断二叉搜索树)
- leetcode Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree
- Leetcode_Validate Binary Search Tree
- Leetcode 98 Validate Binary Search Tree
- LeetCode_Validate Binary Search Tree
- LeetCode -- Validate Binary Search Tree
- LeetCode(Validate Binary Search Tree) 判断一个二叉树是否是二叉搜索树
- leetCode(25):Validate Binary Search Tree 分类: leetCode 2015-06-23 13:00 154人阅读 评论(0) 收藏
- leetcode JAVA Validate Binary Search Tree 难度系数3 3.35
- [LeetCode]Validate Binary Search Tree
- LeetCode(98) Validate Binary Search Tree
- leetcode - Validate Binary Search Tree
- 【LeetCode-面试算法经典-Java实现】【098-Validate Binary Search Tree(验证二叉搜索树)】
- leetcode 98. Validate Binary Search Tree
- Validate Binary Search Tree -- LeetCode