LeetCode98. 验证二叉搜索树

题目

代码

法一、中序遍历结果保存下来,查看是否是递增序列

 1 class Solution {
 2 public:
 3     vector<int>res;
 4     void dfs(TreeNode* root){
 5         if(root == NULL) return;
 6         dfs(root->left);
 7         res.push_back(root->val);
 8         dfs(root->right);
 9     }
10     bool isValidBST(TreeNode* root) {
11         dfs(root);
12         for(int i = 0;i < res.size()-1;i++){
13             if(res[i] >= res[i+1])  return false;
14         }
15         return true;
16     }
17 };

法二、递归,在遍历过程中查看是否有序

 1 class Solution {
 2 public:
 3     long long maxVal = LONG_MIN;
 4     bool isValidBST(TreeNode* root) {
 5         if(root == NULL) return true;
 6         bool left = isValidBST(root->left);
 7         if(maxVal < root->val) maxVal = root->val;
 8         else return false;
 9         bool right = isValidBST(root->right);
10         return left && right;
11     }
12 };

注意:

1.不能简单的比较左节点小于根节点,根节点小于右节点 就为true。BST树是根节点大于左子树的所有结点,小于右子树的所有结点。

2. 树的结点元素的值可以取到 INT_MIN,所以要用更小的值,用long long 类型,LONG_MIN,,或者通过记录上上一个结点指针

 1 class Solution {
 2 public:
 3     TreeNode *pre = NULL;
 4     bool isValidBST(TreeNode* root) {
 5         if(root == NULL) return true;
 6         bool left = isValidBST(root->left);
 7         if(pre !=NULL && pre->val  >=  root->val) return false;
 8         else pre = root;
 9         bool right = isValidBST(root->right);
10         return left && right;
11     }
12 };

 

posted @ 2021-03-11 22:17  Uitachi  阅读(51)  评论(0编辑  收藏  举报