二叉树前中后序给定两个确定第三个

一颗二叉树的前序遍历是ABCDFGHE,后序遍历是BGHFDECA,中序遍历是?

https://www.nowcoder.com/questionTerminal/9a60e7b4602a4e69b97c16bf7b5582fb

我们做笔试的时候,经常会遇到这样的题,但是这样的题目不难,而且二叉树的节点一般不多(一般不超过15个),我把分析思路写在下面:

给定中序和前后序中的一个的情况

  1. 一般情况下,给定中序和前后序中的一个,比如给定中序和前序,中序和后序,我们都可以得到完整的二叉树,由此所有的深度优先遍历都应该是尽在囊中。

主要步骤

alt 比如,此题,我们可以首选根据前序遍历确定根节点为A,然后根据中序遍历可以将其使用A分为两部分,左子树为DCF,右子树为EB,然后我们可以知道{D,C,F}三个节点在同一颗子树上(暂时不考虑顺序),{E,B}三个节点在同一颗子树上,然后我们可以根据前序遍历的特点(总是先遍历父节点),知道C是左子树的根节点,B是右子树的根节点。此时我们可以确定如下部分:

alt

根据中序遍历可知,左子树的中序遍历为DCF,C又是节点,则可以确定左子树的全部结构,如下图。右子树只有两个节点,而B是父节点,C只能是子节点,左节点还是右节点呢?根据中序遍历的结果,发现E在B的前面,根据中序遍历的特点,说明E是左节点。如下图,可得整个二叉树的结构:

alt

然后即可得到后续遍历的结果为:DFCEBA,答案选C。 alt

主要思想:

整体与部分的思想:把每一个子树都当成独立的子树

充分利用给定条件:前序和中序的条件都要反复充分利用

给定后续和中序的情况,也是类似的,留给读者自己探索

给定前序和后序,求中序

如果给定的是前序和后序,我们就不一定能够确定二叉树具体的节点位置了,可能可以唯一确定,也可能无法唯一确定,但是选择题的选项是可以推导出来的。

如下例题: alt

首先我们分析得到该二叉树的根节点为A,然后分析前序遍历后为B,后续遍历A前位C,B≠C,所以A下两个子节点必然都不为空,并且左节点为B,右节点为C,得到下图:

alt

然后看前序遍历,B和C之前是左子树,C之后是右子树,B和C中间没有元素,所以左子树为B,B的节点均为空。CDFGHE,这些节点均为右子树的节点。然后以C为根节点,把右子树当成完整的一棵树来看待(整体与部分思想)。

然后重复刚才的过程,再看前序遍历C后为D,后续遍历C前为E,D≠E,所以C的两个节点均不为空,且左节点为D,右节点为E,得到如下图:

alt

然后看前序遍历(为什么总看前序遍历,因为前序遍历简单,能给出更多的信息,目的是为了获得更多的辅助信息,如果看别的也能看出来,也可以),D和E中间是D节点下的元素,E后面是E节点下的元素,E后面没有元素了,所以,FGH三个元素都是D节点下的,然后前序遍历中FGH三者的开头是F,所以F是父节点。

但是我们只有前序和后续的结果,缺少中序结果,我们无法判断F是D的左节点还是右节点,两个节点都是对的。

得到如下图:

alt

然后我们看前序遍历的F后面是G,后续遍历的前面是H,H≠G,所以,F的左节点为G,右节点为H,可得如下图:

alt

所以中序遍历的结果有两种,分别是:

  1. BADGFHCE
  2. BAGFHDCE

所以,只有C选项符合,是BADGFHCE,所以选C

alt

补充

这种题目还有一个bug,我们可以依靠题目中的前序和选项中的中序,反过来推导题目中的后序,如果能推导出来,那该选项就是答案了。这种做题技巧也是可以掌握的。

给定前序,问哪一种中序是不可能的

还有一种题目是,给定前序,问哪一个中序是不可能的,这样的题目可以采用的一种思路是,一一代入,看哪个不能构成二叉树。一般不能构成二叉树的原因是父节点把两棵子树错误分隔开了,使得前序的结果中的两棵子树的结果产生交叉,从而不合理。

alt

一一代入,就假设给定前序和中序,看能不能形成一个二叉树 A选项,可以形成二叉树,全是右子树,如下图: alt

B选项,可以形成二叉树,全是左子树,如下图:

alt

C选项, 也可以形成二叉树,如下图:

alt

D选项不可以形成二叉树,请先看下图:

alt

我们首先确定A是根节点,然后B是左子树的根节点,然后根据中序遍历可以得到D单独为一组,CE是一组,是左子树的右子树,那么CE在前序遍历的时候也是挨着的,但是我们看到前序遍历的顺序是CDE,这CE不挨着,因此产生矛盾点,D选项无法组成二叉树,所以选D

alt

全部评论

相关推荐

练习生懒羊羊:开飞机把这个公司创飞吧
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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