网易首页 > 网易号 > 正文 申请入驻

多位95后程序员获公司700万大奖。。。

0
分享至

专栏:50多种数据结构彻底征服

专栏:50多种经典图论算法全部掌握

在百度9月19日内部活动上,李彦宏为激励员工的创新与研发精神,给4支内部团队颁发“百度最高奖”,每支团队获奖100万美元(合700万人民币),总额超2800万人民币,获奖团队中有多位95后成员。

在活动上,李彦宏说:“不是说,公司比较顺的时候,我们多发几个奖,逆境的时候,我们就少发几个奖,我们再苦不能苦技术人员,百度的技术信仰是一贯的 ,是永远的。”

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第99题:恢复二叉搜索树。

问题描述

来源:LeetCode第99题

难度:中等

给你二叉搜索树的根节点 root ,该树中的 恰好两个节点的值被错误地交换 。请在不改变其结构的情况下,恢复这棵树 。

示例1:


输入:root = [1,3,null,null,2] 输出:[3,1,null,null,2] 解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。

示例2:


输入:root = [3,1,4,null,null,2] 输出:[2,1,4,null,null,3] 解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。

  • 树上节点的数目在范围 [2, 1000] 内

  • -2^31 <= Node.val <= 2^31 - 1

问题分析

这题说的是一颗二叉搜索树的两个节点被错误的交换,让我们恢复这棵二叉搜索树。

我们知道 二叉搜索树的中序遍历结果是有序的 ,我们只需要对这棵二叉搜索树进行中序遍历,就可以找出这两个错误的节点,最后交换它们的值即可。

比如正常二叉搜索树中遍历的结果是:[1,2,3,4,5],是有序的,由于错误交换两个节点,比如2和4交换,导致中序遍历的结果变成[1,4,3,2,5],在中序遍历的时候每次都会和前一个节点值比较,如果当前节点比前一个节点值小,说明出现了错误的节点。

比如第一次3比4小,说明4(pre)是第一个错误节点,第二次是2比3小,说明2(cur)是第二个错误节点,最后交换它们的值即可。

JAVA:

private TreeNode pre;// 前一个节点
private TreeNode first;// 第一个错误节点
private TreeNode second;// 第二个错误节点

public void recoverTree(TreeNode root) {
    inorder(root);// 二叉树的中序遍历
    // 交换两个节点
    int tmp = first.val;
    first.val = second.val;
    second.val = tmp;
}

private void inorder(TreeNode cur) {
    if (cur == null)
        return;
    inorder(cur.left);// 递归左子树

    // 先找第一个错误节点,如果当前节点比前一个节点值小,说明前一个节点是错误的。
    if (first == null && pre != null && cur.val < pre.val)
        first = pre;
    // 第一个错误节点找到之后再找第二个。
    if (first != null && cur.val < pre.val)
        second = cur;

    pre = cur;// 更新前一个节点
    inorder(cur.right);// 递归右子树
}

C++:

private:
    TreeNode *pre;// 前一个节点
    TreeNode *first;// 第一个错误节点
    TreeNode *second;// 第二个错误节点

    void inorder(TreeNode *cur) {
        if (cur == nullptr)
            return;
        inorder(cur->left);// 递归左子树

        // 先找第一个错误节点,如果当前节点比前一个节点值小,说明前一个节点是错误的。
        if (first == nullptr && pre && cur->val < pre->val)
            first = pre;
        // 第一个错误节点找到之后再找第二个。
        if (first && cur->val < pre->val)
            second = cur;

        pre = cur;// 更新前一个节点
        inorder(cur->right);// 递归右子树
    }

public:
    void recoverTree(TreeNode *root) {
        inorder(root);// 二叉树的中序遍历
        // 交换两个节点的值
        int tmp = first->val;
        first->val = second->val;
        second->val = tmp;
    }

Python:

def recoverTree(self, root: Optional[TreeNode]) -> None:
    self.pre = None  # 前一个节点
    self.first = None  # 第一个错误节点
    self.second = None  # 第二个错误节点

    def inorder(cur):
        if cur is None:
            return
        inorder(cur.left)  # 递归左子树

        # 先找第一个错误节点,如果当前节点比前一个节点值小,说明前一个节点是错误的。
        if self.first is None and self.pre is not None and cur.val < self.pre.val:
            self.first = self.pre
            # 第一个错误节点找到之后再找第二个。
        if self.first is not None and cur.val < self.pre.val:
            self.second = cur

        self.pre = cur  # 更新前一个节点
        inorder(cur.right)  # 递归右子树

    inorder(root)  # 二叉树的中序遍历
    # 交换两个节点
    self.first.val, self.second.val = self.second.val, self.first.val

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
给机会就敢打!深圳王牌后卫两战砍26分11助,今夏有望冲击大合同

给机会就敢打!深圳王牌后卫两战砍26分11助,今夏有望冲击大合同

老叶评球
2026-05-22 17:26:57
美国教授感慨:全世界都低估了中国,中国是一个真正伟大的文明

美国教授感慨:全世界都低估了中国,中国是一个真正伟大的文明

国际阿尝
2026-05-21 18:44:41
对美国AI芯片说再见,中国接到俄罗斯下的AI芯片大订单

对美国AI芯片说再见,中国接到俄罗斯下的AI芯片大订单

老鼜尾声电影解说
2026-05-21 16:39:02
河南穷小伙娶大10岁上海富婆,富婆患癌后剃了光头,他却不离不弃

河南穷小伙娶大10岁上海富婆,富婆患癌后剃了光头,他却不离不弃

娱乐的硬糖吖
2026-05-22 00:59:49
私吞奖金又有猛料!男生发帖曝光后,樊同学曾找人洗白,真过分了

私吞奖金又有猛料!男生发帖曝光后,樊同学曾找人洗白,真过分了

社会日日鲜
2026-05-21 07:59:04
唯独跳过母队曼联,拉什福德单独发文感谢维拉、巴萨、英格兰

唯独跳过母队曼联,拉什福德单独发文感谢维拉、巴萨、英格兰

懂球帝
2026-05-22 18:52:22
嘲笑别人是“基本盘”,却没发现自己活成了“乌合之众”

嘲笑别人是“基本盘”,却没发现自己活成了“乌合之众”

鲁先生的笔
2026-05-22 11:39:44
日媒发现:在澳大利亚,中国首超日本

日媒发现:在澳大利亚,中国首超日本

环球时报国际
2026-05-21 08:47:51
228人遇难,法国史上最严重空难审判翻转:法航与空客被判“过失杀人”

228人遇难,法国史上最严重空难审判翻转:法航与空客被判“过失杀人”

红星新闻
2026-05-22 18:15:35
邵佳一终于听劝了?曝范志毅女婿落选新一期国足大名单,引发热议

邵佳一终于听劝了?曝范志毅女婿落选新一期国足大名单,引发热议

罗掌柜体育
2026-05-22 12:56:21
知名女演员道歉:无论初衷如何,我的行为都是不当的

知名女演员道歉:无论初衷如何,我的行为都是不当的

东方不败然多多
2026-05-22 13:25:27
交了智商税才明白:这4种家电一定要买贵的,没钱干脆先不买

交了智商税才明白:这4种家电一定要买贵的,没钱干脆先不买

装修秀
2026-05-21 21:07:00
520鹿晗一个人在吉林度过,面相变了,眼袋浮肿,走路弯腰驼背

520鹿晗一个人在吉林度过,面相变了,眼袋浮肿,走路弯腰驼背

小娱乐悠悠
2026-05-21 09:28:51
吓我一跳!电和天然气烧水,差距居然差出一个月的买菜钱!

吓我一跳!电和天然气烧水,差距居然差出一个月的买菜钱!

小谈食刻美食
2026-04-08 08:25:32
“我不想送黑人进监狱”---白左的“爱心”带来多大祸患

“我不想送黑人进监狱”---白左的“爱心”带来多大祸患

通往远方的路
2026-05-22 08:51:08
巨力索具实控人套现30亿引监管风暴

巨力索具实控人套现30亿引监管风暴

经济观察报
2026-05-22 17:13:26
一款中成药,从根源清血脂,高血脂、血管斑块、血液黏稠都能调

一款中成药,从根源清血脂,高血脂、血管斑块、血液黏稠都能调

中医燕丽娜医生
2026-05-10 15:58:10
10轮中超0球0助!国安旧将遭新东家球迷吐槽,今夏能否重返北京?

10轮中超0球0助!国安旧将遭新东家球迷吐槽,今夏能否重返北京?

体坛鉴春秋
2026-05-22 12:16:06
万万没想到!火箭传奇旧将今夏官宣回归,西部格局彻底要变天!

万万没想到!火箭传奇旧将今夏官宣回归,西部格局彻底要变天!

kio鱼
2026-05-22 13:26:54
后台最硬女神探,遇到破不了的案,直接冤枉路人死刑!

后台最硬女神探,遇到破不了的案,直接冤枉路人死刑!

莫地方
2026-05-16 01:40:03
2026-05-22 22:00:49
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
273文章数 4关注度
往期回顾 全部

科技要闻

雷军:输给特斯拉不丢人

头条要闻

美方称已暂停一项对台军售案 外交部回应

头条要闻

美方称已暂停一项对台军售案 外交部回应

体育要闻

最糟糕裁判?他想要退役当市长

娱乐要闻

周也恋情曝光!对象身份不简单

财经要闻

证监会拟对老虎、富途、长桥依法严厉处罚

汽车要闻

空间、换电、智驾全都要 极狐贝塔S3上市 5.98万起

态度原创

数码
本地
房产
公开课
军事航空

数码要闻

399元起!Yeelight推出智能弱电箱面板:智能控温、接入米家App

本地新闻

用云锦的方式,打开江苏南京

房产要闻

疯抢511轮!今年海南最魔幻的地块,被福建能源企业抢了!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

俄罗斯试射具备核打击能力的高超音速导弹

无障碍浏览 进入关怀版