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 };
  • 相关阅读:
    嵌入式开发之hi3519---i2c EEPROM
    can 驱动
    i2c
    嵌入式开发之hi3519---spi nor flash启动
    centos7 安装后需要做的事情
    zookeeper的可视化web界面
    MySQL各类日志文件相关变量介绍
    Outlook 如何初始化邮箱
    一个不错的运维发布系统的文章
    grafana 的面板设置
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14520964.html
Copyright © 2011-2022 走看看