中序遍历
- 二叉搜索树的中序遍历可以形成有序数组,最暴力的做法就是将遍历的数据存储起来,再进行判断。
vector<int> v;
void inner(TreeNode* root ){
if(!root) return;
inner(root->left);
v.push_back(root->val);
inner(root->right);
}
bool isValidBST(TreeNode* root) {
if(!root) return true;
inner(root);
for(int i=0;i<v.size()-1;i++){
if(v[i] >= v[i+1]) return false;
}
return true;
}
最简洁的代码:DFS
- 针对每个节点,都输入与它的理论上下界进行比较,如果大于等于上界或者小于等于下界,那么说明错误。
- 参数有三个,一个是当前节点,其他两个是上界与下界
class Solution {
public:
bool dfs(TreeNode* root, long long lower, long long upper) {
if (root == nullptr) return true;
if (root -> val <= lower || root -> val >= upper) return false;
return dfs(root -> left, lower, root -> val) && dfs(root -> right, root -> val, upper);
}
bool isValidBST(TreeNode* root) {
return dfs(root, LONG_MIN, LONG_MAX);
}
};
题目