首页 > 其他分享 >leetCode.98. 验证二叉搜索树

leetCode.98. 验证二叉搜索树

时间:2024-06-30 21:58:58浏览次数:3  
标签:right TreeNode val 验证 res leetCode.98 二叉 root left

leetCode.98. 验证二叉搜索树


题目描述
在这里插入图片描述


代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
// 我的做法是:用一个1 * 3的数组取维护每个子树
// 第一位 表示该子树是否满足二叉搜索树, 第二位 维护左子树, 第三位维护右子树
// 维护左右子树的方式:左子树是父节点与当前结点的最小值, 右子树是父节点与当前结点的最大值
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if ( !root ) return true;
        return dfs(root)[0];
    }

    vector<int> dfs( TreeNode * root ) {
        vector<int> res ({1, root->val, root->val});

        if ( root->left ) {
            auto t = dfs( root->left ) ;
            if ( !t[0] || root->val <= t[2] ) res[0] = 0;
            // 表示如果左子树中不满二叉搜索树,或者 左子树的最大值比当前结点还要大,那当前结点就不满足二叉搜索树
            res[1] = min(t[1], res[1] );// 在右子树的最小值时 用
            res[2] = max(t[2], res[2] );// 在左子树的最大值 用
        }

        if ( root->right ) {
            auto t = dfs(root->right);;
            if ( !t[0] || root->val >= t[1] ) res[0] = 0;
            res[1] = min( t[1], res[1]);
            res[2] = max( t[2], res[2]);
        }

        return res;
    }
};

标签:right,TreeNode,val,验证,res,leetCode.98,二叉,root,left
From: https://blog.csdn.net/qq_48290779/article/details/140087340

相关文章

  • 二叉搜索树详解
    一、二叉搜索树的概念二叉搜索树又名二叉排序树以及二叉查找树,它是一颗空树或者是具有以下性质的二叉树*若它的左子树不为空,则左子树上所有节点的值都小于根节点的值*若它的右子树不为空,则右子树上所有节点的值都大于根节点的值*它的左右子树分别为二叉搜索树。二、基本操......
  • 验证二叉搜索树 前序 中序 后序的三种解法 - 灵神视频总结
    这节课用三种方法来验证一颗二叉树是否是搜索树。递归的基础知识:看到递归就晕?带你理解递归的本质!--灵神视频总结-CSDN博客如何灵活运用递归?-灵神视频总结-CSDN博客98.验证二叉搜索树二叉搜索树的定义:给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树......
  • git检查别人提交的PR(pull requests)并在本地验证,然后合并
    可以看官方流程:Checkingoutpullrequestslocally-GitHubDocs当别人给你的开源仓库提交了pullrequest,你该怎么检查别人提交的代码是否可用,然后合并上去呢?今天我就遇到了,就在前不久开源项目douyin-live失败了,需要开启signature字段校验,研究了两天后发现需要使用浏览器......
  • 【C++高阶】高效搜索的秘密:深入解析搜索二叉树
    ......
  • 代码随想录算法训练营第18天 | 、98验证二叉树、700. 二叉搜索树中的搜索
    代码随想录算法训练营第20天|654.最大二叉树https://leetcode.cn/problems/maximum-binary-tree/654.最大二叉树代码随想录https://programmercarl.com/0654.最大二叉树.html617.合并二叉树https://leetcode.cn/problems/merge-two-binary-trees/description/617.合并二......
  • 代码随想录63——二叉树4——迭代遍历
    ......
  • Leetcode 力扣 125. 验证回文串 (抖音号:708231408)
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,aplan,......
  • 芯片验证 | FPGA 原型验证
    更多完整内容访问:【芯片验证|FPGA原型验证】......
  • 代码随想录第13天 | 二叉树part01 基础和遍历
    二叉树基础知识二叉树种类满二叉树满二叉树:如果一棵二叉树只有度为0和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树(子节点要么为0,要么为2)若满二叉树的深度为k(即k层,从1开始),则其节点个数为:2^k-1完全二叉树完全二叉树:从上到下,从左到右,都是连续的。满二叉树一......
  • Gitlab服务器邮箱配置,实现自动为用户发送邮件(注册发送验证链接)
    一.配置前准备工作及说明服务器系统版本:CentOS7postfix,并在终端运行systemctlstatuspostfix检查服务是否已在运行状态,如果显示activate则表示正在运行[root@sage~]$systemctlstatuspostfix●postfix.service-PostfixMailTransportAgentLoaded:loaded(/......