98. 验证二叉搜索树 - 力扣(LeetCode) (leetcode-cn.com)
验证二叉搜索树
递归
- 二叉搜索树的**中序遍历结果是严格递增**的
- 测试用例中最小取到了LONG_MIN
class Solution {
public:
// 对于第一次比较,我们需要找到一个测试用例中的最小值
long max = LONG_MIN;
bool isValidBST(TreeNode* root) {
if (!root) return true;
// 中序遍历
bool left = isValidBST(root->left);
if (max < root->val) max = root->val;
else return false;
bool right = isValidBST(root->right);
return left && right;
}
};
非递归
- 二叉搜索树的**中序遍历结果是严格递增**的
- 测试用例中最小取到了LONG_MIN
class Solution {
public:
bool isValidBST(TreeNode* root) {
if (!root) return true;
stack<TreeNode*> stk;
stk.push(root);
// 比较值
long max = LONG_MIN;
while (!stk.empty()) {
TreeNode* node = stk.top();
stk.pop();
if (node) {
if (node->right) stk.push(node->right);
stk.push(node);
stk.push(nullptr);
if (node->left) stk.push(node->left);
}
// 只修改处理部分即可
else {
node = stk.top();
stk.pop();
if (node->val <= max) return false;
max = node->val;
}
}
return true;
}
};