创作

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

3天内不再提示

面试算法之重建二叉树

TheAlgorithm 来源:算法与数据结构 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 版本

  • 算法
    +关注

    关注

    22

    文章

    3461

    浏览量

    83407
  • 二叉树
    +关注

    关注

    0

    文章

    43

    浏览量

    11059

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

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

收藏 人收藏

    评论

    相关推荐

    动力电池HPPC功率性能测试

    刘莎等对自制17Ah高功率锂离子动力电池的脉冲功率特性进行了研究[1],采用国内某城市简化工况和HP....
    的头像 锂电联盟会长 发表于 06-24 14:26 68次 阅读

    Linux系统下的安装与使用

    然而,开源并不意味着能用、好用。其实,AlphaFold2 软件系统的部署难度极大,并且对硬件的要求....
    的头像 OpenCV学堂 发表于 06-24 10:03 233次 阅读

    开源软件-LZ4无损压缩算法

    ./oschina_soft/lz4.zip
    发表于 06-23 15:21 6次 阅读
    开源软件-LZ4无损压缩算法

    rt-thread 驱动篇(八)hwtimer 重载算法优化

    区别于 rt-thread 内核实现的两种定时器,这种定时器依赖芯片内置的定时器外设,依靠稳定高速的....
    的头像 出出 发表于 06-23 10:10 1429次 阅读
    rt-thread 驱动篇(八)hwtimer 重载算法优化

    MegEngine(天元)深度学习框架

    ./oschina_soft/MegEngine.zip
    发表于 06-21 10:32 6次 阅读
    MegEngine(天元)深度学习框架

    xdelta差量更新算法

    ./oschina_soft/xdelta.zip
    发表于 06-21 09:30 9次 阅读
    xdelta差量更新算法

    开源算法体系构建高效繁荣的AI生态

    上海市经济和信息化委员会人工智能发展处副处长孙跃,ICPA智算联盟理事长、商汤科技联合创始人、集团副....
    的头像 商汤科技SenseTime 发表于 06-21 09:17 89次 阅读

    基于传统算法的OCR技术

    对于文字识别,实际中一般首先需要通过文字检测定位文字在图像中的区域,然后提取区域的序列特征,在此基础....
    的头像 新机器视觉 发表于 06-20 14:31 126次 阅读

    智能手环之技术应用:睡眠检测

    上表中的展示的传感器是目前智能手表中常见的传感器与功能,但是并非所有的智能手表中都内置了这些传感器,....
    的头像 通信工程师专辑 发表于 06-20 14:20 269次 阅读

    算法框架是AI芯片与商业应用的桥梁

    电子发烧友网报道(文/李弯弯)近些年AI模型的应用场景飞速扩展,包括自动驾驶、智慧城市、教育、医疗、....
    发表于 06-18 07:20 270次 阅读
    算法框架是AI芯片与商业应用的桥梁

    c语言实现一元线性回归

    第一:用所给样本求出两个相关变量的(算术)平均值 第二:分别计算分子和分母:(两个公式任选其一)分子....
    的头像 嵌入式应用开发 发表于 06-17 16:16 340次 阅读
    c语言实现一元线性回归

    DiskANN基于图的近似近邻搜索索引

    ./oschina_soft/DiskANN.zip
    发表于 06-17 11:38 15次 阅读
    DiskANN基于图的近似近邻搜索索引

    多种调制方式的相干解调算法和仿真代码

    自动增益控制(AGC)环路用来调节采样信号的功率,使得接收信号保持恒定平均功率。码定时恢复环路调节全....
    的头像 通信工程师专辑 发表于 06-17 10:59 166次 阅读

    嵌入式开发者都该了解的10大算法

    归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是....
    的头像 FPGA之家 发表于 06-16 10:15 203次 阅读

    FPGA开源项目:小球追踪系统设计

    图像采集显示流程一般是:FPGA把摄像头采集图像数据缓存到SDRAM,再从SDRAM搬运到LCD驱动....
    的头像 FPGA之家 发表于 06-16 10:11 270次 阅读

    有趣的算法题热热身:灯泡开关

    通过上面的图例,我们可以很清楚地看到,每一轮都会切换一批灯泡。关键是可能切换到之前已经切换过的灯泡,....
    的头像 算法与数据结构 发表于 06-16 09:30 172次 阅读

    ADS2.0算法演进与对算力的新需求

    未来ADS算法会进入一个全新的2.0阶段,4D空间下基于时空的多模感知与融合推理, 也就是特征提取/....
    的头像 佐思汽车研究 发表于 06-14 11:13 223次 阅读

    LiteOS-M内核队列的关键数据结构及关键算法

    随着数字经济的发展,作为数字基础设施根技术的操作系统成为数字变革的关键力量,OpenAtom Ope....
    的头像 深开鸿 发表于 06-14 11:01 1603次 阅读

    一种优化的方法:记忆化搜索

    上面的做法可以得到最优解,但有一个问题。如下例,以15为起点的时候,会尝试把6->5->4->3->....
    的头像 算法与数据结构 发表于 06-14 10:21 187次 阅读

    无线射频识别信号监控算法的研究与实现

    无线射频识别技术作为一种新兴的识别技术,广泛地应用于军事及民用的各个 领域。它最大的特点就是无接触....
    发表于 06-13 15:15 24次 阅读

    FPGA与GPU架构的背景

    FPGA 可提供一种不同的 AI 优化的硬件方法。与 GPU 不同,FPGA 提供独特的精细化空间可....
    的头像 FPGA之家 发表于 06-13 09:58 207次 阅读

    介绍几个关于ISP算法架构的项目

    用python实现的ISP架构,整体项目架构不如OpenISP,但是有几个算法是OpenISP没有的....
    的头像 OpenFPGA 发表于 06-13 09:39 220次 阅读

    基于Xilinx KV26的立体视觉匹配方案

    深度估算是自动驾驶领域的一项关键技术。作为自动驾驶中最常用的传感器,摄像头能够获取全面、丰富又密集的....
    的头像 新机器视觉 发表于 06-10 10:37 3502次 阅读

    数字PID温控器7参数辨识和扰动抑制

    扩展阿斯特罗姆(Astrom Karl Johan)的继电反馈法在温控器中的应用,把最初仅辨识PID....
    发表于 06-06 16:45 102次 阅读

    btcrobot BTC/LTC自动化算法交易引擎

    btcrobot.zip
    发表于 06-06 16:17 33次 阅读
    btcrobot BTC/LTC自动化算法交易引擎

    Gryphon加密货币交易框架

    gryphon.zip
    发表于 06-06 15:31 14次 阅读
    Gryphon加密货币交易框架

    Primecoin加密货币

    primecoin.zip
    发表于 06-06 14:59 14次 阅读
    Primecoin加密货币

    K-MEANS聚类算法概述及工作原理

    K-means 是一种聚类算法,且对于数据科学家而言,是简单且热门的无监督式机器学习(ML)算法之一....
    的头像 NVIDIA英伟达 发表于 06-06 11:53 326次 阅读

    新晋图像生成王者扩散模型

    他们确定了最佳的时间离散化(time discretization),对采样过程应用了更高阶的Run....
    的头像 OpenCV学堂 发表于 06-06 10:54 187次 阅读

    几个视频/图像处理的项目分享

    F-I-L是一个FPGA平台的开源的图像处理库,已经拥有了许多常用操作,并在不断更新中。这些操作被以....
    的头像 OpenFPGA 发表于 06-06 09:29 226次 阅读

    贪心算法:分发饼干

    对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,....
    的头像 算法与数据结构 发表于 06-06 09:25 264次 阅读

    机器学习算法的介绍

    哲学要回答的基本问题是从哪里来、我是谁、到哪里去,寻找答案的过程或许可以借鉴机器学习的套路:组织数据....
    的头像 新机器视觉 发表于 06-05 14:17 238次 阅读

    如何使用xilinx的HLS工具进行算法的硬件加速

    在整个流程中,用户先创建一个设计 C、C++ 或 SystemC 源代码,以及一个C的测试平台。通过....
    的头像 FPGA之家 发表于 06-02 09:48 301次 阅读

    基于Adaboost人脸检测

    人脸识别系统的主要要求是期望高质量的人脸图像,而质量好的图像则在期望条件下被采集。图像质量对于提取图....
    的头像 新机器视觉 发表于 06-01 14:12 249次 阅读

    基于Xilinx KV26的立体视觉匹配方案

    深度估算是自动驾驶领域的一项关键技术。作为自动驾驶中最常用的传感器,摄像头能够获取全面、丰富又密集的....
    的头像 XILINX开发者社区 发表于 06-01 09:36 1097次 阅读

    捕捉一致的颜色

    挑战:无论是分捡水果和蔬菜还是检查运动鞋,在保证可靠性的前提下高速捕获准确的色彩和丰富的细节都要求相....
    的头像 21克888 发表于 05-27 14:50 1070次 阅读
    捕捉一致的颜色

    一文详解限流算法的实现方式

    不依赖外部库的情况下,限流算法有什么实现的思路?本文介绍了3种实现限流的方式。
    的头像 马哥Linux运维 发表于 05-25 12:00 346次 阅读

    基于FPGA的视频图像拼接融合

    视频流的每个单独帧将具有对应于红色、绿色和蓝色的三个通道。视频帧中的颜色信息不会增强特征检测。此外,....
    的头像 OpenFPGA 发表于 05-25 10:20 1400次 阅读
    基于FPGA的视频图像拼接融合

    基于non-OS和RT-Thread的按键库源码及应用

    核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用 C 语言标准库 API 编写,....
    的头像 硬件攻城狮 发表于 05-23 09:39 506次 阅读
    基于non-OS和RT-Thread的按键库源码及应用

    模型调优和复现算法遇到的一些坑

    更方便深入的理解算法的具体细节,比如可能代码在文章没有提到的某些层上偷摸的加了一个shift操作,比....
    的头像 新机器视觉 发表于 05-18 15:03 305次 阅读

    如何对xilinx FPGA进行bit文件加密

    AES即高级加密标准,是一种区块加密,当然也是对称加密。区块固定为128bit,秘钥为128,192....
    的头像 FPGA设计论坛 发表于 05-17 09:36 385次 阅读

    Trie树数据结构的实现原理和题目实践

    Trie 树又叫字典树、前缀树、单词查找树,是一种二叉树衍生出来的高级数据结构,主要应用场景是处理字....
    的头像 算法与数据结构 发表于 05-11 17:47 729次 阅读

    软、硬件方法解决进程互斥问题

    1.临界资源(critical resource):系统中某些资源一次只允许一个进程使用,称这样的资....
    的头像 Linux内核补给站 发表于 05-10 15:11 326次 阅读
    软、硬件方法解决进程互斥问题

    Kernel密码学算法的软件框架和接口模型

    在Userspace,需指定socket接口 PF_ALG,需指定算法名称(如skcipher)、需....
    的头像 Linux阅码场 发表于 05-09 10:22 237次 阅读

    一文解析通信系统的高效正交变量优化算法

    本文讨论了一种算法,用于在具有正交输入向量的二维空间中找到最佳调整点。该算法根据测量数据点求解相交圆....
    的头像 科技观察员 发表于 05-05 16:37 415次 阅读
    一文解析通信系统的高效正交变量优化算法

    常用锐化算法及Sobel锐化的介绍

    物体的边缘是以图像局部特性不连续性的形式出现的,即边缘意味着一个区域的结束和另一个区域的开始。图像边....
    的头像 FPGA技术江湖 发表于 05-05 11:05 2915次 阅读

    什么是模板匹配?模板匹配的原理讲解 图像处理与模板匹配算法

    一:什么是模板匹配? 在OpenCV教程中这样解释模板匹配: 模板匹配是一项在一幅图像中寻找与另一幅....
    的头像 嵌入式应用开发 发表于 05-05 09:25 3916次 阅读
    什么是模板匹配?模板匹配的原理讲解 图像处理与模板匹配算法

    无死角窥探的焦虑 算法和算力的突破 AI如何反击隐私侵占

    在智能时代,算法和算力的不断突破,让AI技术飞速发展。在工业生产、医疗、交通、能源等领域,AI与大数....
    的头像 脑极体 发表于 05-04 20:02 1811次 阅读

    机器学习简介与经典机器学习算法人才培养

    上课时间安排: 2022年05月27日 — 2022年05月30日 No.1 第一天 一、机器学习简介与经典机器学习算法介绍 什么是机器学习...
    发表于 04-28 18:56 4472次 阅读

    二叉树的最小深度

    遍历顺序上依然是后序遍历(因为要比较递归返回之后的结果),但在处理中间节点的逻辑上,最大深度很容易理....
    的头像 算法与数据结构 发表于 04-28 16:27 455次 阅读

    数组相关的双指针算法

    对于单链表来说,大部分技巧都属于快慢指针,前文 单链表的六大解题套路 都涵盖了,比如链表环判断,倒数....
    的头像 算法与数据结构 发表于 04-28 16:22 960次 阅读

    程序语言的奥妙 算法最好的入门书

    一本很不错的编程基础书籍,算法最好的入门书,有需要的可以下载 ...
    发表于 04-24 10:24 6751次 阅读

    RT-Thread基于优先级的全抢占式调度算法的实现

    一、原理概述 RT-Thread 是一款嵌入式实时操作系统(RTOS),同时也是一款优秀的物联网操作系统,相对于裸机的轮询调度算...
    发表于 04-20 14:17 1343次 阅读

    关于RT-Thread的动态内存堆管理简析

    内存堆管理机制 RT-Thread 操作系统在内存管理上,根据上层应用及系统资源的不同,有针对性地提供了不同的内存分配管理算法。...
    发表于 04-06 17:11 2464次 阅读

    RV1109优势和特点是什么?有哪些应用?

    RV1109优势和特点是什么?有哪些应用?
    发表于 03-10 06:45 1337次 阅读

    0.96寸OLED画圆形算法思路分享

    代码 这个算法是纯原创,没有任何借鉴的元素实现原理大概就是通过两个点算出直线方程然后描点在这个函数中OLED_DrawDot函数...
    发表于 03-01 06:27 742次 阅读

    卡尔曼滤波简介

    在这里我就不介绍卡尔曼的数学推算了,网上的数学推导一抓一大把,如果想了解推导过程的小伙伴可以去大佬的博客。如果你是想直接...
    发表于 02-28 14:24 746次 阅读

    线程池是如何实现的

    线程池的概念是什么?线程池是如何实现的?
    发表于 02-28 06:20 512次 阅读

    如何利用互相关算法求时延差的C语言算法呢

    如何利用互相关算法测出音源与麦克风距离的差值呢? 如何利用互相关算法求时延差的C语言算法呢? ...
    发表于 02-25 06:38 924次 阅读

    什么是归一化算法呢?怎样去使用归一化算法呢

    什么是归一化算法呢?怎样去使用归一化算法呢?...
    发表于 02-25 06:19 817次 阅读