题解 | #牛群中的编号是否有效#

牛群中的编号是否有效

https://www.nowcoder.com/practice/2b4279d545124277a06a8e5eaa802375

大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

二叉搜索树,递归

题目解答方法的文字分析

对于一个有效的二叉搜索树,我们需要满足以下条件:

  1. 当前节点的值大于其左子树中的所有节点值;
  2. 当前节点的值小于其右子树中的所有节点值;
  3. 左子树和右子树都必须是有效的二叉搜索树。

基于这些条件,我们可以使用递归的方式来判断二叉树是否是有效的二叉搜索树。对于每个节点,我们需要判断其值是否满足上述两个条件,然后递归地判断其左子树和右子树是否都是有效的二叉搜索树。在递归过程中,我们还需要传递一个范围,确保左子树的节点值小于当前节点值,右子树的节点值大于当前节点值。

例如,对于二叉树 {2, 1, 3},根节点为 2,它的左子树节点值 1 小于 2,右子树节点值 3 大于 2,同时递归地判断左子树 {1} 和右子树 {3} 也满足二叉搜索树的条件。

本题解析所用的编程语言

C++

完整且正确的编程代码

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return isValidBSTHelper(root, nullptr, nullptr);
    }
    
    bool isValidBSTHelper(TreeNode* node, TreeNode* minNode, TreeNode* maxNode) {
        if (!node) {
            return true;  // 空节点是有效的二叉搜索树
        }
        
        if ((minNode && node->val <= minNode->val) || (maxNode && node->val >= maxNode->val)) {
            return false;  // 节点值超出范围,不是有效的二叉搜索树
        }
        
        // 递归判断左子树和右子树
        return isValidBSTHelper(node->left, minNode, node) && isValidBSTHelper(node->right, node, maxNode);
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!

阿Q的题解 文章被收录于专栏

阿Q秋招刷过的题

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
05-25 10:45
门头沟学院 Java
Frank_zhan...:没实习一个项目肯定不够,可以再做一个轮子,技术栈再补一个mq,微服务,整体再换个简历模板,暑期尽量再找一个日常实习
无实习如何秋招上岸
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务