[leetcode] 98. Validate Binary Search Tree
原创
©著作权归作者所有:来自51CTO博客作者是念的原创作品,请联系作者获取转载授权,否则将追究法律责任
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:
Input:
Output:
Example 2:
Input:
Output:
Explanation:
The root node's value is 5 but its right child's value is 4.
分析
题目的意思是:判断一颗二叉树是否是合法的二叉搜索树。
- 对于一棵二叉搜索树,根结点必须比所有的左子树的值大,然后比右子树的所有的值小。这样就很好理解为什么要用min,max指针了。
- 注意数的溢出问题。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isValidBST(TreeNode* root) {
return judge(root,LONG_MIN,LONG_MAX);
}
bool judge(TreeNode *root, long min_val,long max_val){
if(root==NULL){
return true;
}
if(root->val<=min_val||root->val>=max_val){
return false;
}
return judge(root->left,min_val,root->val)&&judge(root->right,root->val,max_val);
}
};
参考文献
[编程题]validate-binary-search-tree[LeetCode] Validate Binary Search Tree 验证二叉搜索树