25版王道数据结构课后习题详细分析 第五章 树与二叉树 5.3 二叉树的遍历和线索二叉树 选择题部分

一、单项选择题



解析:二叉树中序遍历的最后一个结点一定是从根开始沿右子女指针链走到底的结点,设用p指示。若结点p不是叶结点(其左子树非空),则前序遍历的最后一个结点在它的左子树中,A、B错误;若结点p是叶结点,则前序与中序遍历的最后一个结点就是它,C正确。若中序遍历的最后一个结点p不是叶结点,它还有一个左子女q,结点q是叶结点,那么结点q是前序遍历的最后一个结点,但不是中序遍历的最后一个结点,D错误。

正确答案:C



解析:三种遍历方式中,都先遍历左子树,再遍历右子树,因此b一定在c的前面访问。

正确答案:C



解析:

正确答案:C



解析:后序遍历的顺序是LRN,若n在N的左子树,m 在N的右子树,则在后序遍历的过程中n在m之前访问;若n是m的子孙,设m在N的位置,则n无论是在m的左子树还是在右子树,在后序遍历的过程中n都在m之前访问。其他都不可以。选项C要成立,就需加上两个结点位于同一层这个条件。

正确答案:D

------------------------------------------------------------

------------------------------------------------------------

解析:在后序遍历退回时访问根结点,就可以从下向上把从n到m的路径上的结点输出,若采用非递归的算法,则当后序遍历访问到n时,栈中把从根到n的父指针的路径上的结点都记忆下来,也可以找到从m到n的路径。

正确答案:C



解析:

正确答案:C



解析:左永远在右前面,三种遍历方式中,访问左、右子树的先后顺序是不变的,只是访问根结点的顺序不同,因此叶结点的先后顺序完全相同。可以采用特殊值法,画一个结点数为3的满二叉树,采用三种遍历方式来验证答案的正确性。

正确答案:B



解析:对每个顶点从1开始按序编号,要求结点编号大于其左、右孩子编号,并且左孩子编号小于右孩子编号。编号越大说明遍历顺序越靠后,因此,三者遍历顺序为先左子树、再右子树、后根结点。4个选项中仅后序遍历满足要求。

正确答案:C



解析:结点v的编号比其左子树上的最小编号还小,而v的右子树中的最小编号大于v的左子树中的最大编号,因此v的编号比其左、右子树上的所有编号都小,显然是按先序遍历次序。

正确答案:B



解析:

正确答案:D



解析:7个结点的完全二叉树是一棵3层的满二叉树,画出相应二叉树的树形,根据后序遍历序列填入相应的结点,得到相应的完全二叉树,求得其先序遍历序列为ABCDEFG。

正确答案:C



解析:二叉树的前序遍历为NLR,后序遍历为LRN。根据题意,在前序序列中X在Y之前,在后序序列中X在Y之后,若设X在根的位置,Y在其左子树或右子树中,即满足要求。

正确答案:C



正确答案:C



解析:因前序序列和中序序列可以确定一棵二叉树,所以可试着用题目中的序列构造出相应的二叉树,即可得知,只有选项B的序列可以构造出二叉树。

正确答案:B



解析:先序序列为NLR,后序序列为LRN,虽然可以唯一确定树的根结点,但无法划分左、右子树。例如,先序序列为AB,后序序列为BA。

正确答案:D



解析:中序遍历是"左根右",后序遍历是"左右根",当任一结点没有右子树时,两种遍历都是"左根"。显然,当二叉树为空树或只有根结点时,其中序序列和后序序列也相同。

正确答案:B



解析:

正确答案:D



解析:

正确答案:A



解析:

正确答案:B



正确答案:AC



解析:删除一个结点时,需要先递归地删除它的左、右孩子,并释放它们所占的存储空间,然后删除该结点,并删除它所占的存储空间,这正好和后序遍历的访问顺序相吻合。

正确答案:C



解析:线索是前驱结点和后继结点的指针,引入线索的目的是加快对二叉树的遍历。

正确答案:A



解析:二叉树是一种逻辑结构,但线索二叉树是加上线索后的链表结构,即它是二叉树在计算机内部的一种存储结构,所以是一种物理结构。

正确答案:C



解析:n个结点共有链域指针2n个,其中,除根结点外,每个结点都被一个指针指向。剩余的链域建立线索,共2n-(n-1)=n+1个线索。

正确答案:C



解析:线索二叉树中用ltag/rtag标识结点的左/右指针域是否为线索,其值为1时,对应指针域为线索,其值为0时,对应指针域为左/右孩子。

正确答案:C



解析:对左子树为空的二叉树进行先序线索化,根结点的左子树为空并且也没有前驱结点(先遍历根结点),先序遍历的最后一个元素为叶结点,左、右子树均为空且有前驱无后继结点,所以线索化后,树中空链域有2个。

正确答案:D



解析:不是每个结点通过线索都可以直接找到它的前驱和后继。在先序线索二叉树中查找一个结点的先序后继很简单,而查找先序前驱必须知道该结点的双亲结点。同样,在后序线索二叉树中查找一个结点的后序前驱也很简单,而查找后序后继也必须知道该结点的双亲结点,二叉链表中没有存放双亲的指针。

正确答案:D

------------------------------------------------------------

------------------------------------------------------------

解析:后序线索二叉树不能有效解决求后序后继的问题。如下图所示,结点E的右指针指向右孩子,而在后序序列中E的后继结点为B,在查找E的后继时仍然只能按常规方法来查找。

正确答案:D



解析:在二叉中序线索树中,某结点若有左孩子,则按照中序"左根右"的顺序,该结点的前驱结点为左子树中最右的一个结点(注意,并不一定是最右叶结点)。

正确答案:C



解析:在二叉树的后序遍历中,叶结点X的后继是其双亲,因此X的右线索应指向该结点。

正确答案:A



解析:后序线索树遍历时,最后访问根结点,若从右孩子x返回访问父结点,则由于结点x的右孩子不一定为空(右指针无法指向其后继),因此通过指针可能无法遍历整棵树。如下图所示,结点中的数字表示遍历的顺序,图(c)中结点6的右指针指向其右孩子5,而不指向其后序后继结点7,因此后序遍历还需要栈的支持,而图(a)和图(b)均可遍历。

正确答案:C



解析:非空二叉树的先序序列和后序序列相反,即"根左右"与"左右根"顺序相反,因此树只有根结点,或根结点只有左子树或右子树,其子树也有同样的性质,任意结点只有一个孩子,才能满足先序序列和后序序列正好相反。此时树形应为一个长链,树中仅有一个叶结点。

正确答案:B



解析:分析遍历后的结点序列,可以看出根结点是在中间被访问的,而且右子树结点在左子树之前,则遍历的方法是RNL。本题考查的遍历方法并不是二叉树遍历的3种基本遍历方法,对于考生而言,重要的是掌握遍历的思想。

正确答案:D



解析:题中所给二叉树的后序序列为dbca。结点d无前驱和左子树,左链域空。无右子树,右链域指向其后继结点b;结点b无左子树,左链域指向其前驱结点d:结点c无左子树,左链域指向其前驱结点b,无右子树,右链域指向其后继结点a。

正确答案:D



解析:

正确答案:C



解析:

正确答案:A



解析:

正确答案:A



解析:线索二叉树的线索实际上指向的是相应遍历序列特定结点的前驱结点和后继结点,所以先写出二叉树的中序遍历序列debxac,中序遍历中在x左边和右边的字符,就是它在中序线索化的左、右线索,即b,a.

正确答案:D



解析:

正确答案:B



解析:

正确答案:B



解析:先序序列先访问父结点,接着访问左子树,然后访问右子树。中序序列先访问左子树,接着访问父结点,然后访问右子树,递归进行。若所有非叶结点只有右子树,则先序序列和中序序列都先访问父结点,后访问右子树,递归进行。

正确答案:B



解析:

正确答案:B



解析:

正确答案:A

相关推荐
Zion__5 分钟前
详解数据结构中的链表结构
数据结构·链表
熬夜学编程的小王7 分钟前
数据结构————栈的讲解(超详细!!!)
数据结构
hummhumm9 分钟前
数据库系统 第58节 数据库审计
网络·数据库·python·算法·oracle·java-ee·database
计算机学姐36 分钟前
基于SpringBoot+Vue的考研学习分享互助平台
java·vue.js·spring boot·后端·学习·考研·spring
尚学教辅学习资料36 分钟前
基于SpringBoot的考研助手系统+LW参考示例
spring boot·后端·考研·java项目·计算机毕设·毕业论文
程序员大金37 分钟前
基于SpringBoot+Vue+MySQL的考研互助交流平台
java·vue.js·spring boot·后端·mysql·考研·tomcat
summ1ts1 小时前
P3489 [POI2009] WIE-Hexer
c++·算法·图论·dijkstra·状态压缩
安科瑞刘鸿鹏1 小时前
老旧电力系统安全隐患增加 该如何预防电气线路老化等因素引发的电气火灾呢?
运维·服务器·网络·数据结构·能源
Mephisto.java1 小时前
【数据结构与算法 | 灵神题单 | 合并链表篇】力扣2, 21, 445, 2816
数据结构·leetcode·链表