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

牛群中的编号是否有效

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

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return bool布尔型
     */

    // write code here
    /**
    * 判断给定的二叉树是否为二叉搜索树(BST)
    * @param root 二叉树的根节点
    * @return 若是二叉搜索树则返回true,否则返回false
    */
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    /**
     * 辅助方法,判断以当前节点为根的子树是否为二叉搜索树
     * @param node 当前节点
     * @param minVal 当前节点值的下界
     * @param maxVal 当前节点值的上界
     * @return 若以当前节点为根的子树是二叉搜索树则返回true,否则返回false
     */
    private boolean isValidBST(TreeNode node, long minVal, long maxVal) {
        // 若当前节点为空,表示该子树有效,返回true
        if (node == null) {
            return true;
        }

        // 若当前节点的值超出上下界范围,不满足二叉搜索树定义,返回false
        if (node.val <= minVal || node.val >= maxVal) {
            return false;
        }

        // 递归判断左右子树是否为二叉搜索树,并更新上下界范围
        return isValidBST(node.left, minVal, node.val) &&
               isValidBST(node.right, node.val, maxVal);
    }
}

这道题考察的是 二叉搜索树 的判断。BST是一种特殊的二叉树,其中任意节点的左子树中的值小于该节点的值,右子树中的值大于该节点的值。

该代码通过递归的方式来判断给定的二叉树是否为BST。具体解释如下:

  • isValidBST(TreeNode root)方法是对外的接口,用于判断给定的二叉树root是否为BST。它调用了辅助方法isValidBST(TreeNode node, long minVal, long maxVal)来进行判断。
  • isValidBST(TreeNode node, long minVal, long maxVal)方法用于判断以当前节点node为根的子树是否为BST。minValmaxVal分别表示当前节点值的下界和上界,用于限制当前节点的值范围。
  • 首先,如果当前节点为null,说明该子树有效,返回true。
  • 然后,判断当前节点的值是否超出了指定的范围,如果超出了范围,则不满足BST定义,返回false。
  • 最后,递归地判断当前节点的左子树和右子树是否为BST,通过更新minValmaxVal的值,将约束范围传递给下一层递归。如果左右子树都是BST且满足当前节点的值约束,则返回true,否则返回false。

代码中使用了long类型的minValmaxVal,是为了处理特殊情况,即节点值等于Long.MIN_VALUELong.MAX_VALUE的情况。

这种递归的解法时间复杂度为O(n),其中n为二叉树的节点个数。通过递归遍历二叉树的每个节点,并进行值的比较,判断是否满足BST的定义。

全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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