🏷️ 知识点:Ds.05.03.02

共 8 道相关题目

课后题 年第 51 题 数据结构 选择题

引入线索二叉树的目的是(  )。

A. 加快查找结点的前驱或后继速度 B. 方便插入和删除 C. 方便找到双亲 D. 使遍历结果唯一

[tag_link]

正确答案:A

结论

利用空指针域保存前驱/后继线索。

推导

利用空指针域保存前驱/后继线索。

易错点

把线索当作双亲指针


课后题 年第 52 题 数据结构 选择题

n个结点的线索二叉树上含有的线索数为(  )。

A. 2n B. n-1 C. n+1 D. n

[tag_link]

正确答案:C

结论

2n指针域减去n-1孩子指针,余n+1条线索。

推导

2n指针域减去n-1孩子指针,余n+1条线索。

易错点

漏算根结点空指针


课后题 年第 53 题 数据结构 选择题

判断线索二叉树中*p结点有右孩子结点的条件是( )。右孩子条件由p->rtag==0标识。

A. p!=NULL B. p->rchild!=NULL C. p->rtag==0 D. p->rtag==1

[tag_link]

correct answer: C

结论

rtag=0表示右指针为真实右孩子,rtag=1表示右线索。

推导

先读标志位而不是只看指针值:rtag=0时rchild保存孩子地址,rtag=1时rchild保存后继线索。因此判定有右孩子必须检查rtag==0。

易错点

不要把非空右指针与真实孩子混同。


课后题 年第 54 题 数据结构 选择题

一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是( )。

A. 不确定 B. 0个 C. 1个 D. 2个

[tag_link]

correct answer: D

结论

根的左域无先驱而为空,先序最后叶的右域无后继而为空,共2个。

推导

先序序列的首结点没有先驱,树的左子树又为空,所以根的左域无法填线索;先序末结点没有后继,其右域也无法填线索。因此还剩2个空链域。

易错点

线索只填可确定的前驱/后继。


课后题 年第 55 题 数据结构 选择题

在线索二叉树中,下列说法不正确的是( )。

A. 中序线索树中有右孩子时后继为右子树最左下结点 B. 中序线索树中有左孩子时前驱为左子树最右下结点 C. 线索二叉树利用n+1个空指针存放前驱和后继信息 D. 每个结点通过线索都可直接找到前驱和后继

[tag_link]

correct answer: D

结论

先序前驱或后序后继通常需要双亲信息,D错误。

推导

逐项检查可知,中序前驱和后继可沿孩子或线索取得,且n个结点确有n+1个空指针域可线索化;但先序前驱、后序后继等方向可能需要回到双亲,普通线索结构不能保证直接取得。

易错点

线索不保证所有方向均可直接访问。


课后题 年第 56 题 数据结构 选择题

二叉树在线索化后,仍不能有效求解的问题是( )。

A. 先序线索二叉树中求先序后继 B. 中序线索二叉树中求中序后继 C. 中序线索二叉树中求中序前驱 D. 后序线索二叉树中求后序后继

[tag_link]

correct answer: D

结论

标准二叉线索无双亲指针,后序后继需回溯双亲。

推导

后序次序是左、右、根。访问完某结点后,可能要回到双亲,再判断兄弟子树或双亲本身;标准二叉链表没有双亲指针,所以后序后继不能总在常数步内求出。

易错点

后序前驱可由线索,后继不可。


课后题 年第 57 题 数据结构 选择题

若X是二叉中序线索树中一个有左孩子且X不为根的结点,则X的前驱为( )。

A. X的双亲 B. X的右子树中最左的结点 C. X的左子树中最右的结点 D. X的左子树中最右的叶结点

[tag_link]

correct answer: C

结论

中序LNR,X前驱是左子树中最右结点,不必为叶。

推导

中序次序是左、根、右。X有左孩子时,X之前最后访问的必是左子树中沿右链到达的最右结点;该结点可以仍有左孩子,所以不能额外限定为叶结点。

易错点

不要额外限定为最右叶。


课后题 年第 58 题 数据结构 选择题

若X是后序线索二叉树中的叶结点,且X存在左兄弟Y,则X的右线索指向( )。

A. X的双亲 B. 以Y为根的子树的最左下结点 C. X的左兄弟Y D. 以Y为根的子树的最右下结点

[tag_link]

correct answer: A

结论

后序LRN中叶X之后访问其双亲,右线索指向双亲。

推导

X有左兄弟Y,说明后序遍历先完成Y子树,再访问作为右孩子的叶X,随后访问二者的双亲。因此X的后序后继就是双亲,右线索应指向双亲。

易错点

后序后继不是左兄弟子树。