栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode98验证二叉搜索树刷题打卡

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode98验证二叉搜索树刷题打卡

98. 验证二叉搜索树

题目描述

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

题解思路

本题我用了三种方法解题,分别是数组法,递归法,迭代法,他们的核心思想都是利用了二叉搜索树的中序遍历是一个递增的序列

  • 数组法,利用中序遍历,将每个节点的值放入一个数组,然后判断这个数组是否是递增的即可

    • class Solution {
      public:
          void inorder(TreeNode* root, vector &v){
              if(!root) return;
              inorder(root->left, v);
              v.push_back(root->val);
              inorder(root->right, v);
          }
          bool isBST(vector v){
              for(int i = 0; i < v.size() - 1; i++){
                  if(v[i] >= v[i+1]) return false;  // 如果有一个不是升序则返回false
              }
              return true;
          }
          bool isValidBST(TreeNode* root) {
              vector v;
              inorder(root, v);  // 中序遍历将节点放入数组
              return isBST(v);  // 判断数组是否是升序
          }
      };
      
  • 递归法,整体代码神似中序的递归

    • class Solution {
      public:
          long maxval = LONG_MIN;
          bool isbst(TreeNode* root){
              if(!root) return true;
      
              bool left = isbst(root->left);
      
              if(maxval < root->val) maxval = root->val;
              else return false;
      
              bool right = isbst(root->right);
      
              return left && right;
          }
          bool isValidBST(TreeNode* root) {
              return isbst(root);
          }
      };
      
    • 使用LONG_MIN而不使用INT_MIN的原因是有一个测试用例是[-2147483648],也就是INT_MIN,而在leetcode中LONG_MIN是-2^64,是比这个测试用例小的,所以替换成LONG_MIN可以

  • 迭代法,其实就是二叉树中序遍历的中序迭代遍历,这里我用的是统一迭代遍历法的中序遍历

    • lass Solution {
      public:
          long maxval = LONG_MIN;
          bool isValidBST(TreeNode* root) {
              stack s;
              if(!root) return true;
              s.push(root);
              while(!s.empty()){
                  TreeNode *cur = s.top();s.pop();
                  if(cur){
                      if(cur->right) s.push(cur->right);
                      s.push(cur);
                      s.push(NULL);
                      if(cur->left) s.push(cur->left); 
                  }else{
                      cur = s.top();
                      s.pop();
                      if(maxval < cur->val) maxval = cur->val;
                      else return false;
                  }
              }
              return true;
          }
      };
      
暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号