题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树
只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
代码
使用中序遍历是有序的特性
class Solution {
public:void reversal(TreeNode* node, vector<int>& vec) {if (node == nullptr) return;reversal(node->left, vec);vec.push_back(node->val);reversal(node->right, vec);}bool isValidBST(TreeNode* root) {if (root == nullptr) return true;vector<int> res;reversal(root, res);for (int i = 1; i < res.size(); i++)if (res[i - 1] >= res[i]) return false;return true;}
};
不开辟额外的空间
class Solution {
public:TreeNode* pre=nullptr; //用来记录前一个节点bool isValidBST(TreeNode* root) {if (root == nullptr) return true;bool left = isValidBST(root->left);if (pre != nullptr && pre->val >= root->val)return false;pre = root;bool right = isValidBST(root->right);return left && right;}
};