zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    Java的Timezone问题
    Java正确获取星期Calendar.DAY_OF_WEEK
    Solr5之Schema.xml详解
    java文档生成器
    JRE扩展与jar文件
    java的访问权限
    java包与导包
    java方法、方法重载
    算法分析作业(C|C++版本)
    Java运算符
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14520964.html
Copyright © 2011-2022 走看看