首页 > 其他分享 >leetcode--98. 验证二叉搜索树(bfs)

leetcode--98. 验证二叉搜索树(bfs)

时间:2024-01-28 14:11:25浏览次数:41  
标签:return val -- nullptr bfs 98 && root 节点

记录
13:50 2024-1-28

https://leetcode.cn/problems/validate-binary-search-tree/

想岔方向了,想的太复杂了。
首先思路是每个root节点必须大于左子树的最大节点,小于右边子树的最小节点。
我的做法是记录下叶子节点,因为左边叶子节点的集合(vector)的最后一个节点为左子树的最大值,同理右边边叶子节点的集合(vector)的第一个节点为右子树的最小值。

这么想太复杂了,主要问题是集中于root节点去判断左右子树,如果聚焦于左右子树可以明白,左子树的最大节点要小于root,右子树的最小节点要大于root。
基于以上原理可以表示为:

  • MIN < 左子树所有节点 < root->value
  • root->value < 右子树所有节点 < MAX
    我的思路
class Solution {
public:
    bool check(TreeNode* root, vector<int>& leaf) {
        if(root == nullptr) return true;

        if(root->left == nullptr && root->right == nullptr) {
            leaf.push_back(root->val);
            return true;
        }

        if(root->left !=nullptr && root->left->val >= root->val) return false;
        if(root->right !=nullptr && root->right->val <= root->val) return false;

        vector<int> lleaf, rleaf;

        if(root->left != nullptr && !check(root->left, lleaf)) return false;

        if(root->right != nullptr && !check(root->right, rleaf)) return false;

        if(!lleaf.empty() && lleaf.back() >= root->val) return false;
        if(!rleaf.empty() && rleaf.front() <= root->val) return false;

        leaf = lleaf;
        leaf.insert(leaf.end(), rleaf.begin(), rleaf.end());

        return true;
    }

    bool isValidBST(TreeNode* root) {
        vector<int> leaf;
        return check(root, leaf);
    }
}

leetcode上比较好的思路

class Solution {
public:
    bool check(TreeNode* root, long min, long max) {
        if(root == nullptr) return true;

        if(root->val <= min || root->val >= max) return false;

        return check(root->left, min, root->val) && check(root->right, root->val, max);
    }

    bool isValidBST(TreeNode* root) {
        return check(root, LONG_MIN, LONG_MAX);
    }
}

标签:return,val,--,nullptr,bfs,98,&&,root,节点
From: https://www.cnblogs.com/57one/p/17992835

相关文章

  • 寒假训练2024/1/27
    2024/1/27uva120题意:给一个序列,给定一个序列的反转方式,要求用最少的次数把序列反转成升序思路:看到定级是个橙题,我以为就是简单的看头尾反转,因为样例给的很简单,按照猜测乱写了一个,WA了。看了一眼udebug,发现不是简单的头和尾是所需要的数字。我们需要先从大的数字开始,这是因......
  • [word] 如何快速更改word文档中标题和正文的字体
    Word2007版本以上支持快速更改标题和正文的字体一、打开word文档,点击【设计】选项卡 ......
  • [word] 如何在 Word 里给指定人设置特定文档权限
    在日常使用Word的过程中,如果需要给指定的人设置特定的权限,这时该如何操作呢?步骤一:先打开你需要分享的文档:步骤二:找到【文件】,并且点击:步骤三:点击【分享文档(D)】:步骤四:点击【指定好友】:步骤五:找到要分享的人:步骤六:然后点击:如果是只让他看,不让他编辑,就点击【仅查看】:如果可以让他看......
  • [职场] 面试技巧
    1.必须要在面试时有良好的形象,不仅仅要把紧自己的嘴巴,还要做到三思而后答。2.在回答问题的过程中必须要注意留足进退的余地,真正的做到随机而应变。3.在回答问题的过程中还要做到稳定自己的情绪,沉着而理智的应对一些突发情况。4.必须要注意不置可否地应答,千万不要回......
  • [经验] 找不到工作怎么办又没钱怎么办
    1、找不到工作怎么办在如今这个竞争激烈的社会,对于许多刚刚毕业或者正在找工作的人来说,找不到工作是一种常态。对于这种情况,我们不应该灰心丧气或者放弃努力。我们需要寻找正确的方法和态度,来更好地应对这一问题。我们需要梳理自身优势并寻找适合自己的工作岗位。在寻找工作的过程......
  • [职场] 幼师资格证面试考什么
    幼儿园教师资格面试主要考查申请幼儿园教师资格人员应具备的基本素养、职业发展潜质和保教实践能力,主要包括:1.良好的职业道德、心理素质和思维品质。2.仪表仪态得体,有一定的表达、交流、沟通能力。3.有一定的技能技巧,能够恰当地达成保教目标。(一)职业认知......
  • [office] excel公式符号解释
    在Excel中经常需要用到公式符号进行对公式的编辑,如果对公式符号不熟悉的话运用起公式来就不太熟练就会导致工作效率下降,或许有的朋友并不知道公式符号起如何的作用,如果不懂的朋友欢迎一起来研究讨论一番吧。下面是小编带来的关于excel公式符号解释,希望阅读过后对你有所启发!......
  • KEIL5下载安装
    Keil5是一款嵌入式系统开发的集成开发环境(IDE),由德国公司KeilSoftware开发。它提供了一套完整的开发工具和调试器,用于开发基于ARM处理器的嵌入式应用程序。Keil5支持多种编程语言,包括C、C++和汇编语言,并提供了丰富的库和组件,方便开发人员进行应用程序的编写和调试。该软件集成了一......
  • 安卓反编译机制,应用场景以及工具解析
    一、引言随着移动应用的普及,安卓系统成为了市场上的主流操作系统之一。然而,安卓应用的源代码往往受到版权保护,开发者需要对其安全性进行维护。此时,反编译技术应运而生,成为保障应用安全的重要手段。本文将详细介绍安卓反编译的机制、应用场景、相关工具及技术,并对其优劣进行分析。二......
  • [word] Word怎么批量添加空格
    在Word文档中如何在每个文字中间加一个空格呢?还是一个个的文字敲打吗?教你一个小技巧,批量添加空格,超简单。1、选中整个文档,按下快捷键Ctrl+H打开查找替换对话框,在查找内容中输入【?】,在替换中输入【^&空格】,再点击更多勾选“使用通配符”。......