【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树
作者:mmseoamin日期:2024-03-04

根据前(后)序、中序,确定二叉树,高妙的方法!!!

  • 二叉树的前中后序遍历
  • ⏩巧妙的方法!
  • 根据前序遍历和中序遍历,确定二叉树
    • 例题1
    • 例题2
    • 根据后序遍历和中序遍历,确定二叉树
      • 例题1❗
      • 例题2
      • 例题3

        只需动动笔画个图,秒画二叉树~~

        声明:本篇文章的技巧适合做选择填空题,编程还得是老路子

        –例题全部选自牛客–

        二叉树的前中后序遍历

        若二叉树为空,则空操作 ->

        前序遍历( preorder Travelsal )

        1️⃣先访问根节点; 2️⃣前序遍历左子树; 3️⃣前序遍历右子树。

        中序遍历( inorder Travelsal )

        1️⃣中序遍历根节点的左子树; 2️⃣访问根节点然后访问根节点; 3️⃣中序遍历右子树。

        后序遍历( postorder Travelsal )

        1️⃣后序遍历左子树; 2️⃣后序遍历右子树; 3️⃣访问根结点

        ⏩巧妙的方法!

        已知二叉树中的结点有n个

        画一组坐标轴(类似小学一年级学的x、y轴),或者想象网格,道理是一样的

        step1:

        🍎如果是已知前序遍历和中序遍历:

        咱们把前序遍历的结果倒序,然后从y轴的1开始,自下而上填在坐标轴上

        把中序遍历的结果直接写在x轴的1到n

        🍎如果是已知后序遍历和中序遍历:

        把后序遍历的结果直接写在y轴的1到n

        把中序遍历的结果直接写在x轴的1到n

        step2:

        将x轴和y轴填入的结点对应,填在第一象限

        step3:

        按照“自上而下,从左到右”的原则,连接各个结点,二叉树就完美被还原啦!!!

        ‼️注意 连接各个结点的时候,下层结点的连线不能 “跨过” 上层的结点,因为这样会改变二叉树中序遍历的次序

        (这里的层指的是坐标系中从上到下的层次,跟树的第n层不是一个概念,我们画的结点所在的层不是真的在二叉树中的层)‼️

        比如:

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第1张

        D和M在我们画的图中处于不同的层次,但是他们在二叉树中都处于第二层

        根据前序遍历和中序遍历,确定二叉树

        上面描述的可能有些抽象,

        我们直接上例题,相信大家一眼就能看懂

        例题1

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第2张第一步,画图!

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第3张

        第二步,填上结点!

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第4张

        第三步,按照“自上而下,从左到右”,画出二叉树

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第5张

        有同学问我,为什么不能这样连接,不是从左到右吗?

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第6张

        记住第三步的原则:“自上而下,从左到右”‼️要先搞定上下的顺序,再搞定左右顺序

        (下图原理就是根据前序遍历中的第一个结点就是根结点,再在中序里确定根结点左边的结点是左子树的结点,右边是右子树的结点)

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第7张

        例题2

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第8张好像跟上面的一样,嘿嘿

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第9张

        根据后序遍历和中序遍历,确定二叉树

        例题1❗

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第10张

        照葫芦画瓢~~

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第11张

        但是这里有个问题,有同学可能要问了,“你不是说自上而下从左到右”吗,我也没违反这个原则,这里为什么不能这样画呢?

        👇

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第12张

        为什么呢?因为这样画中序遍历就扯🥚了,题目给的中序遍历结果是debac,如果像这样画,中序遍历就变成edbac了~~~~

        –⏩巧妙的方法介绍中,最后的注意讲的就是这种情况

        例题2

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第13张

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第14张

        例题3

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第15张

        注意这道题求的是层序遍历,不是后序

        【数据结构】根据前后序和中序遍历节点顺序,快速还原二叉树,在这里插入图片描述,第16张