0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

面试算法之重建二叉树

算法与数据结构 来源:算法与数据结构 2019-11-27 15:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

从今天开始,公众号陆陆续续开始插写用动画形式展现算法题,如剑指offer、Leedcode里经典面试题型,同时也会更新数据结构与算法基础、网络原理等知识。

以为无论是面试还是实际项目,对算法的要求也非常的严格,所以小鹿尽最大努力把算法还原成动画形式来讲解,争取让每个人都能看懂算法、学会算法。

1

题目

已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的?

2

基础巩固

根据上述题目所述,我们已知前序遍历和中序遍历,回顾一下,什么是前序遍历?什么是中序遍历?

2.1 前序遍历

前序遍历一颗二叉树,首先输出根节点,然后输出左子节点,最后输出右子节点。

比如,遍历一下二叉树:

颜色变深表示遍历,突出表示输出

2.2 中序遍历

中序遍历一棵二叉树,首先输出左子节点,然后输出输出根节点,最后右子节点。

以上边二叉树为例,通过中序遍历输出。

3

解题思路

既然我们知道了二叉树如何进行前序遍历和中序遍历了,那么已知前序遍历和中序遍历如何反推二叉树呢?

那么问题来了,只知道前序遍历能不能反推二叉树呢?我们就试一下,比如题目中所述,{1,2,4,7,3,5,6,8},根据前序遍历,根、左、右,1 肯定是 根节点,那么一下2,4,7.....哪些是左子节点呢?左子节点有几个呢?很显然我们是不知道的,由此可以得出,只知道前序遍历是不可能反推出二叉树的,中序遍历也是如此,自己可以尝试一下。

那么前序遍历和中序遍历可不可以?那我们要试一下,我们上边通过前序遍历找到第一个根节点就是 1,如图

中序遍历{4,7,2,1,5,3,8,6}的规律又是左、根、右,所以 1 结点在中序遍历中为根,它的左边就是所有左子节点4,7,2,右边为所有的右子节点5,3,8,6。

此时我们已经划分左右子节点了,但是左边的子节点中哪些又是根节点呢?我们再回到前序遍历中,根据前序遍历的特点,根、左、右,在从子节点进行划分,那么 1 结点中的子节点谁为根节点呢?

我们一眼就能看出来,就是 2 结点,那么剩余的 4,7 左右结点怎么分呢?我们根据上述再回到中序遍历,找到 2 根节点,根据中序遍历左、根、右的特点,找到 2 结点,那左边的就是左子节点,右边的就是右子节点,我们可以看到,左边有两个数,正是 4 和 7 结点。

右边只有 1 结点,1 结点我们刚刚说了,是根节点,所以以 2 为根节点是没有右子节点的,剩下的数字也是同样的方式区分,自己可以试一下,动手画一画。

我们仔细发现,其实整个层层往下,以及左右,都是相同的解决方式,而且大问题可以分解为小问题,我们下意识就应该想起小鹿之前分享过的知识,那就是递归,既然是递归,就应该有终止条件,终止条件就是当子节点为空时,此时递归结束。

4

测试用例

我们之前的文章强调过,手写代码之前,一定先把测试用例想好,为了能够在手写代码的时候考虑到边界情况,还为了防止你到时候面试涂涂改改。

4.1 普通测试

完全二叉树、非完全二叉树。

4.2 特殊测试

只有左子节点二叉树,只有右子节点、只有一个结点的二叉树 —— 特殊二叉树测试。

4.3 输入测试

空树、空指针null、前序和中序不匹配。

5

代码实现

JavaScript 版本

Java 版本

C 语言版本

Python 版本

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4816

    浏览量

    98797
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    13024

原文标题:动画:面试算法之重建二叉树

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    UniStore正式全面开放

    5月7日,宇科技正式宣布,全球首个人形机器人任务动作应用商店——宇UniStore官方共享应用平台即日起面向全球用户全面开放。用户可通过该平台开发和下载机器人应用,像安装手机App一样简单,无需任何底层编程能力。
    的头像 发表于 05-09 11:22 1087次阅读

    3DGS技术详解():视觉重建到物理仿真,3DGS如何走向工程应用?

    )如何突破静态重建的局限,实现对动态天气、移动光源等复杂环境因素的建模与仿真。这标志着3DGS已不再仅仅是“高保真场景重建工具
    的头像 发表于 03-20 17:37 1064次阅读
    3DGS技术详解(<b class='flag-5'>二</b>):视觉<b class='flag-5'>重建</b>到物理仿真,3DGS如何走向工程应用?

    AI面试的真与假,不在报告是否漂亮,而在评分是否可追溯

    在招聘场景中,AI面试真正需要回答的,并不是“能不能生成一份看起来足够智能的报告”,而是两个更基础、也更严肃的问题: 第一,评分究竟是否真正由算法独立完成; 第,这一评分是否具备足够的信度与效度
    的头像 发表于 03-16 16:28 198次阅读
    AI<b class='flag-5'>面试</b>的真与假,不在报告是否漂亮,而在评分是否可追溯

    面试必看!排队自旋锁32位变量的域划分与核心作用

    在操作系统面试中,并发同步机制一直是高频考点,而排队自旋锁作为解决传统自旋锁“饥饿” 问题的关键技术,其 32 位变量的域划分更是面试官青睐的 “细节题”。不少同学能说出排队自旋锁的基本概念,却对其
    的头像 发表于 02-09 16:54 974次阅读
    <b class='flag-5'>面试</b>必看!排队自旋锁32位变量的域划分与核心作用

    面试必看:排队自旋锁MCS锁的实现原理与关键考点

    在并发编程面试中,“锁” 是绕不开的核心话题,而自旋锁作为轻量级锁的代表,其优化方案更是高频考点。
    的头像 发表于 02-09 16:51 895次阅读
    <b class='flag-5'>面试</b>必看:排队自旋锁<b class='flag-5'>之</b>MCS锁的实现原理与关键考点

    探索LMH2191:52 MHz时钟驱动的卓越

    探索LMH2191:52 MHz时钟驱动的卓越选 在电子设计领域,时钟信号的稳定与精确对于设备的性能至关重要。今天,我们就来深入了解一款出色的时钟驱动芯片——Texas Instruments
    的头像 发表于 02-09 11:40 412次阅读

    亿纬锂能与杭集团达成战略合作

    近日,亿纬锂能与杭集团2025年战略研讨会暨战略合作协议签约仪式在杭州举行。亿纬锂能副总裁、商用车电池产品线总裁江吉兵博士,亿纬锂能商用车电池产品线国内销售部总经理井振江,杭集团董事、副总经理兼
    的头像 发表于 01-04 18:18 1230次阅读

    C语言的常见算法

    = next; } return prev; } ``` ### 二叉树遍历 (前序) ```c struct TreeNode { int val; struct TreeNode
    发表于 11-24 08:29

    通过优化代码来提高MCU运行效率

    选择时间复杂度低的算法。 根据访问模式选择数据结构。频繁查找用哈希表,有序数据用二叉树等。 查表法:对于复杂的数学计算(如sin, log),或者协议解析,预先计算好结果存于数组中,用空间换时间
    发表于 11-12 08:21

    Verilog实现使用Booth编码和Wallace的定点补码乘法器原理

    结果只需要一个周期,大大提升了乘法器性能。 1.Booth编码 将乘数看作从最低位开始的一串进制数字。Booth算法的基本思路是:对于具有连续0和1的组,需要产生的部分积较少。对于乘数中每个0
    发表于 10-23 08:01

    人工智能工程师高频面试题汇总:循环神经网络篇(题目+答案)

    ,提前准备一些面试常问的问题,比如概率论与统计知识、机器学习的那些算法,或者深度学习的框架,还有怎么优化模型,循环神经网络等,这些都是加分项,能有效提高面试通过率
    的头像 发表于 10-17 16:36 955次阅读
    人工智能工程师高频<b class='flag-5'>面试</b>题汇总:循环神经网络篇(题目+答案)

    请问rtt studio 的文件夹打红什么意思?

    rtt studio 的文件夹打红什么意思?而且文件夹里面实际是有文件的,但是浏览不出来。
    发表于 09-18 06:34

    信号发生器如何与波束赋形算法配合优化?

    -120dBm,测试算法在低SNR下的初始波束捕获能力。 毫米波通信:生成28GHz或39GHz的参考信号,带宽400MHz,验证算法在高频段的大规模MIMO波束训练性能。 、信号发生器与波束赋形
    发表于 08-08 14:41

    亿纬锂能荣获杭集团2022-2024年度优秀供应商奖

    近日,亿纬锂能凭借卓越产品、可靠交付与优质服务荣获杭集团颁发的“2022-2024年度优秀供应商”奖。杭集团副总经理兼杭电器董事长金华曙、杭电器总经理兼杭博电机总经理李明辉出席
    的头像 发表于 07-15 09:00 1158次阅读

    航天宏图全栈式3DGS实景三维重建系统解决方案

    表达的核心技术,通过相机、传感器等设备获取物理空间数据,并结合计算机视觉与图形学算法,将维图像转换为三维模型。目前,主流的三维重建方法包括倾斜摄影(多视角立体重建)、激光扫描和神经辐
    的头像 发表于 06-27 09:28 2113次阅读
    航天宏图全栈式3DGS实景三维<b class='flag-5'>重建</b>系统解决方案