// class Solution {
// public:
// TreeNode* pre = NULL; // 用来记录前一个节点
// bool isValidBST(TreeNode* root) {
// if (root == NULL) return true;
// bool left = isValidBST(root->left);
// if (pre != NULL && pre->val >= root->val) return false;
// pre = root; // 记录前一个节点
// bool right = isValidBST(root->right);
// return left && right;
// }
// };
class Solution {
private:
vector<int> vec;
void traversal(TreeNode* root) {
if (root == NULL) return;
traversal(root->left);
vec.push_back(root->val); // 将二叉搜索树转换为有序数组
traversal(root->right);
}
public:
bool isValidBST(TreeNode* root) {
vec.clear(); // 不加这句在leetcode上也可以过,但最好加上
traversal(root);
for (int i = 1; i < vec.size(); i++) {
// 注意要小于等于,搜索树里不能有相同元素
if (vec[i] <= vec[i - 1]) return false;
}
return true;
}
};