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 3Binary tree
[2,1,3],
return true.
Example 2:
1 / \ 2 3Binary tree
[1,2,3],
return false.
使用一个递归的思想。当前节点成立的条件就是子节点也得成立。
/**
* 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 check(TreeNode *p, int min, int max)
{
if (!p)
return 1;
else if (p->val > max || p->val < min)
return 0;
TreeNode *l = p->left;
TreeNode *r = p->right;
if ( (l && p->val <= l->val) || (r && p->val >= r->val) ) //提前比较,当前节点可能是INT_MIN,左子节点就无法再减1,会出现未知错误
return 0;
return (check(l, min, p->val - 1) && check(r, p->val + 1, max));
}
bool isValidBST(TreeNode* root)
{
return check( root, INT_MIN, INT_MAX );
}
};
本文介绍了一种使用递归方法来判断给定的二叉树是否为有效的二叉搜索树(BST)。通过定义BST的基本特性:左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值,并且左右子树本身也必须是BST,文章提供了一个简洁的C++实现方案。
501

被折叠的 条评论
为什么被折叠?



