题意
题解
方法一: 递归
class Solution {
public:
bool helper(TreeNode* root, long long lower, long long upper) {
if (root == nullptr) {
return true;
}
if (root -> val <= lower || root -> val >= upper) {
return false;
}
return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
}
bool isValidBST(TreeNode* root) {
return helper(root, LONG_MIN, LONG_MAX);
}
};
方法二:中序遍历
class Solution {
public:
bool isValidBST(TreeNode* root) {
stack<TreeNode*> st;
long long pre = (long long)INT_MIN - 1;
while (!st.empty() || root) {
while (root) {
st.push(root);
root = root->left;
}
root = st.top();
st.pop();
if (root->val <= pre)
return false;
pre = root->val;
root = root->right;
}
return true;
}
};
递归版本
class Solution {
long pre = Long.MIN_VALUE; // 记录上一个节点的值,初始值为Long的最小值
public boolean isValidBST(TreeNode root) {
return inorder(root);
}
// 中序遍历
private boolean inorder(TreeNode node) {
if(node == null) return true;
boolean l = inorder(node.left);
if(node.val <= pre) return false;
pre = node.val;
boolean r = inorder(node.right);
return l && r;
}
}