声明: 这篇文章非常详细地给出了多种方法
思路: 首先很容易想到直接判断中间节点与左右子节点的大小关系。但是仅仅如此是不够的。如
图中3比5小,因此我们要保证每个节点无等差的在一个范围内,用值来约束它。与我上一篇博客给出树的前序中序,按层输出的思路是类似的。
其中LONG_MIN、LONG_MAX是C++中内置的,无需再声明定义。
class Solution {
public:
bool isValidBST(TreeNode* root) {
return isValidBST(root, LONG_MIN, LONG_MAX);
}
bool isValidBST(TreeNode* root, long min, long max) {
if (!root) {
return true;
}
if (root->val <= min || root->val >= max) {
return false;
}
return (isValidBST(root->left, min, root->val)&& isValidBST(root->right, root->val, max));
}
};