数据结构题库11

第五章 树和二叉树
一、单项选择题
1.关于二叉树的下列说法正确的是 (1)。
(1):A.二叉树的度为2 B.二叉树的度可以小于2
C.每一个结点的度都为2 D.至少有一个结点的度为
2.设深度为h(h>0)的二叉树中只有度为0和度为2的结点,则此二叉树中所含的结点总数至少为 (2)。
(2)A.2h B.2h-1 C.2h+1 D.h+1
3.在树中,若结点A有4个兄弟,而且B是A的双亲,则B的度为 (3) 。
(3):A.3 B.4 C.5 D.6
4.若一棵完全二叉树中某结点无左孩子,则该结点一定是 (4) 。
(4):A.度为1的结点 B.度为2的结点 C.分支结点 D.叶子结点
5.深度为k的完全二叉树至多有 (5) 个结点,至少有 (6) 个结点。
(5)-(6):A.2k-1-1 B.2k-1 C.2k-1 D.2k
6.前序序列为ABC的不同二叉树有 (7) 种不同形态。
(7):A.3 B.4 C.5 D.6
7.若二叉树的前序序列为DABCEFG,中序序列为BACDFGE,则其后序序列为 (8) ,层次序列为 (9) 。
(8)-(9):A.BCAGFED B.DAEBCFG C.ABCDEFG D.BCAEFGD
8.在具有200个结点的完全二叉树中,设根结点的层次编号为1,则层次编号为60的结点,其左孩子结点的层次编号为 (10) ,右孩子结点的层次编号为 (11) ,双亲结点的层次编号为 (12)。
(10)-(12):A.30 B.60 C.120 D.121
9.遍历一棵具有n个结点的二叉树,在前序序列、中序序列和后序序列中所有叶子结点的相对次序 (13) 。
(13):A.都不相同 B.完全相同 C.前序和中序相同 D.中序与后序相同
10.在由4棵树组成的森林中,第一、第二、第三和第四棵树组成的结点个数分别为30,10,20,5,当把森林转换成二叉树后,对应的二叉树中根结点的左子树中结点个数为 (14) ,根结点的右子树中结点个数为 (15) 。
(14)—(15):A.20 B.29 C.30 D.35
11.具有n个结点(n>1)的二叉树的前序序列和后序序列正好相反,则该二叉树中除叶子结点外每个结点 (16) 。
(16):A.仅有左孩子 B.仅有右孩子 C.仅有一个孩子 D.都有左、右孩子
12.判断线索二叉树中p结点有右孩子的条件是 (17) 。
(17):A.p!=NULL B.p->rchild!=NULL C.p->rtag=0 D.p->rtag=1
13.将一棵树转换成二叉树,树的前根序列与其对应的二叉树的 (18) 相等。树的后根序列与其对应的二叉树的 (19)相同。
(18)—(19):A.前序序列 B.中序序列 C.后序序列 D.层次序列
14.设数据结构(D,R),D={dl,d2,d3,d4,d5,d6},R={<d4,d2>,<d2,d1>,<d2,d3>,<d4,d6>,<d6,d5>},这个结构的图形是 (20) ;用 (21) 遍历方法可以得到序列{d1,d2,d3,d4,d5,d6}。
(20):A.线性表 B.二叉树C.队列 D.栈
(21):人前序 B.中序 C.后序 D.层次
15.对于树中任一结点x,在前根序列中序号为pre(x),在后根序列中序号为post(x),若树中结点x是结点y的祖先,下列 (22) 条件是正确的。
(22):A.pre(x)<pre(y)且post(x)<post(y)
B.pre(x)<pre(y)且post(x)>post(y)
C. pre(x)>pre(y)且post(x)<post(y)
D.pre(x)>pre(y)且post(x)>post(y)
16.每棵树都能惟一地转换成对应的二叉树,由树转换的二叉树中,一个结点N的左孩子是它在原树对应结点的 (23) ,而结点N的右孩子是它在原树里对应结点的 (24) 。
(23)—(24):A.最左孩子 B.最右孩子 C.右邻兄弟 D.左邻兄弟
17.二叉树在线索化后,仍不能有效求解的问题是 (25) 。
(25):A.前序线索树中求前序直接后继结点
B.中序线索树中求中序直接前驱结点
C.中序线索树中求中序直接后继结点
D.后序线索树中求后序直接后继结点
18.一棵具有124个叶子结点的完全二叉树,最多有 (26)个结点。
(26):A.247 B.248 C.249 D.250 。
19.实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最有效的存储结构是采用 (27) 。
(27):A. 二叉链表 B.孩子链表 C.三叉链表 D.顺序表
二、填空题
1.树中任意结点允许有 (1)孩子结点,除根结点外,其余结点 (2) 双亲结点。
2.若一棵树的广义表表示为A(B(E,F),C(C(H,I,J,K),L),D(M(N)))。则该树的度为 (3) ,树的深度为 (4) ,树中叶子结点个数为 (5) 。
3.若树T中度为1、2、3、4的结点个数分别为4、3、2、2,则T中叶子结点的个数是 (6) 。
4.一棵具有n个结点的二叉树,若它有m个叶子结点,则该二叉树中度为1的结点个数是 (7) 。
5.深度为k(k>0)的二叉树至多有 (8) 个结点,第i层上至多有 (9) 个结点。
6.已知二叉树有52个叶子结点,度为1的结点个数为30则总结点个数为 (10) 。
7.已知二叉树中有30个叶子结点,则二叉树的总结点个数至少是 (11) 。
8.高度为6的完全二叉树至少有 (12) 个结点。
9.一个含有68个结点的完全二叉树,它的高度是 (13) 。
10.已知一棵完全二叉树的第6层上有6个结点(根结点的层数为1),则总的结点个数至少是 (14) ,其中叶子结点个数是 (15) 。
11.已知完全二叉树第6层上有10个叶子结点,则这棵二叉树的结点总数最多是 (16) 。
12.一棵树转换成二叉树后,这棵二叉树的根结点一定没有 (17) 孩子,若树中有m个分支结点,则与其对应的二叉树中无右孩子的结点个数为 (18) 。
13.若用二叉链表示具有n个结点的二叉树,则有 (19) 个空链域。
14.具有m个叶子结点的哈夫曼树,共有 (20)个结点。
15.树的后根遍历序列与其对应的二叉树的 (21) 遍历序列相同。
16.线索二叉树的左线索指向其 (22) ,右线索指向其 (23) 。
三、应用题
1.具有n个结点的满二叉树的叶子结点个数是多少?
2.列出前序遍历序列是ABC的所有不同的二叉树。
3.已知二叉树的层次遍历序列为ABCDEFGHIJK,中序序列为DBGEHJACIKF,请构造一棵二叉树。
4.已知二叉树的中序遍历序列是ACBDGHFE,后序遍历序列是ABDCFHEG,请构造一棵二叉树。
5.已知二叉树的前序、中序和后序遍历序列如下,其中有一些看不清的字母用表示,请先填写处的字母,再构造一棵符合条件的二叉树,最后画出带头结点的中序线索链表。
(1)前序遍历序列是:BCG
(2)中序遍历序列是:CB
EAGH*
(3)后序遍历序列是:*EDB**FA
6.将下图所示的森林转换成一棵二叉树,并画出这棵二叉树的顺序存储结构。
在这里插入图片描述
7.将下图所示的二叉树还原成森林。
在这里插入图片描述
8.对于给定的一组权值{3,5,6,7,9},请构造相应的哈夫曼树,并计算其带权路径长度。
四、算法设计题
1.请设计一个算法,求以孩子兄弟链表表示的树中叶子结点个数。
2.请编写一个算法,实现将以二叉链表存储的二叉树中所有结点的左、右孩子进行交换。
3.请编写一个算法,将以二叉链表存储的二叉树输出其广义表表示形式。
4.请编写一个算法,判断以二叉链表存储的二叉树是否为完全二叉树。
5.假设二叉树采用链接存储方式存储,编写一个二叉树先序遍历和后序遍历的非递归算法。…
6.已知一棵二叉树用二叉链表存储,t指向根结点,p指向树中任一结点。请编写一个非递归算法,实现求从根结点t到结点p之间的路径。

参考答案

第五章
一、单项选择题
(1)-(5)BBCDC (6)-(10)BCABC (11)—(15)DABBD (16)-(19)CCABB
(20)-(24) BBBAC (25)-(27)DBC
二、填空题
(1)有零个或多个 (2)有且仅有一个
(3)根据树的广义表表示,可以画出这棵村,该树的度为4。
(4)树的深度为4
(5)树中叶子结点个数为8
(6)n0=14 (7)n-2m+1 (8)2k-1 (9)2i-1 (10)133 (11)59
(12)25=32 (13)log2(n+1)=log269=7 (14) 25-1+6=37 (15) 19
(16)27-1-20=107 (17)右 (18)m+1 (19)n+1 (20) 2m-1
(21)中序 (22)直接前驱结点 (23)直接后继结点
三、应用题
1.具有n个结点的满二叉树中只有度为2和度为0的结点,故n=2n0-1,n0=(n+1)/2。
5.构造一棵二叉树应该先确定根结点,由后序序列最后一个字母A确定根结点,可将前序序列的第一个字母改为A。在中序遍历序列中A的左子树中含4个字母,右子树中含3个字母,在后序遍历序列中左子树的后序遍历子序列为EDB,可将左子树的后序遍历序列和中序遍历序列互相补足,分别是CEDB和CBDE。由这两个子序列可知左子树的根结点为B,D又为以B为根结点的右子树的根结点,E为D的右孩子,所以在前序序列中A的左子树的前序序列为:BCDE,在根结点A的右子树中,由后序遍历序列可确定其根结点为F,再确定其中序序列为GHF,进一步确定其前序序列为FGH,补足*处后,三个遍历序列为:
(1)前序遍历序列是:ABCDEFGH
(2)中序遍历序列是:CBDEAGHF
(3)后序遍历序列是:CEDBHGFA
由前序遍历序列和中序遍历序列可构造一棵二叉树如右图。
在这里插入图片描述
四、算法设计题
1.求叶子结点个数。
算法描述如下:
int leafnum(Csnode *t,int n)
{Gsnode *p;
if(tNULL) return 0;
p=t->fc;
if(p
NULL)
n++;
while§
{n=leaf(p,n);
p=p->ns;
}
return n;
}
2.交换左右孩子。算法如下:
void exchange(Btnode *t)
{Btnode *p;
if(t)
{exchange(t->lchild);
exchange(t->rchild);
if(t->lchild||t->rchild)
{p=t->lchild;
t->lchild=t->rchild;
t->rchild=p;}
}
}
3.void printbtree(Btnode *r)
{if®
{printf(“%c”,r->data);
if(r->lchild||r->rchild)
printf(“(”);
printbtree(r->lchild);
if(r->rchild)
printf(“,”);
printbtree(t->rchild);
printf(“)”);
}
}
4. #define MAX 100
int checkt(Btnode t)
{Btnode s[MAX];
int i,n=0;
for(i=0;i<MAX,i++)
s[i]=NULL;
if(t==NULL)
return 0;
i=0;
S[0]=t;
While(I<=n)
{if(!s[i])
return 0;
if(s[i]->lchild)
{n=2
i+1;
s[n]=s[i]->lchild;
}
if(s[i]->rchild)
{n=2
i+2;
s[n]=s[i]->rchild;
}
i++;
}
return 1;
}
5.(1)前序遍历二叉树的非递归算法的基本思想是:从二叉树的根结点开始,沿左支一直走到没有左孩子的结点为止,在走的过程中访问所遇结点,并把非空右孩子进栈。当找到没有左孩子的结点时,从栈顶退出某结点的右孩子,此时该结点的左子树已遍历结束,然后按上述过程遍历该结点的右子树,如此重复,直到二叉树中所有结点都访问完毕为上。算法如下:
void preorder(Btnode *t)
{ int I=0;
Btnode *p,*s[M];
P=t;
Do
{ while§
{printf(“%c\t”,p->data);
if(p->rchild!=NULL)
s[i++]=p->rchild;
p=p->lchild;
}
if(i>0)
p=s[–i];
}while(i>0||p!=NULL);
}
(2)后序遍历二叉树的非递归算法的基本思想:采用一个栈保存返回的结点,先遍历根节点的所有结节点并入栈,出栈一个结点,然后遍历该结点的右结点并入栈,再遍历该右结点的所有左结点并入栈,当一个结点的左右子树均访问后再访问该结点,如此这样,直到栈为空为止。其中的难点是如何判断一个结点t的右结点已访问过,为此用p保存已访问过的结点(初值为NULL),若t->right=p成立(在后序遍历中,t的右节点一定是在t之前访问),说明t的左右子树均已访问,现在应访问t。算法如下:
void postorder(Btree *t)
{ Btree s[maxsize];
Btree p;
int flag,top=-1;
Do
{ while(t)
{ top++;
s[top]=t;
t=t->left;
}
p=NULL;
flag=1;
while(top=-1&&flag)
{ t=s[top];
if(t->rightp)
{ printf(“%d””,t->data);
top–;
p=t;
}
else
{ t=t->right;
flag=1;
}
}
}while(top!=-1)
}
6.求二叉树中从根结点到p结点之间路径长度的算法描述如下:
#define MAX 100
void path(Btnode *t,Btnode *p)
{ Btnode *s[MAX],*q=t;
int b[MAX],top=-1;
do {
while(q)
{s[++top]=q;
b[top]=0;
q=q->lchild;
}
if(top->-1&&b[top]1)
{q=s[top];
if(q
p)
{printf(“根结点到q结点的路径是:”);
for(I=0;I<=top;I++)
printf(“%c”,s[I]->data);
return;
}
else top–;
}
if(top>-1)
{ p=s[top]->rchild;
b[top]=1;
}
}while(top>0);
}
7.判断以二叉链表存储的二叉树是否为完全二叉树的算法描述如下:
#define MAX 100
void checkt(BTnode *t)
{ Btnode *s[MAX];
int i,n=0;
for(i=0;i<MAX;i++)
s[i]=MAX;
if(t
NULL)
return 0;
s[0]=t;
while(i<=n)
{ if(!s[i])
return 0;
if(s[i]->lchild)
{ n=2
i+1;
s[n]=s[i]->lchild;
}
if(s[i]->rchild)
{ n=2
i+2;
s[n]=s[i]->rchild;
}
i++;
}
return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习路线】Java

Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考&#xff1a;…

学生公寓智能限电系统的功能和作用

学生公寓智能限电系统‌是一种用于管理和限制学生公寓用电的设备和技术&#xff0c;旨在确保用电安全、防止火灾事故&#xff0c;并促进节能减排。以下是关于学生公寓智能限电系统的详细介绍&#xff1a; 1、功能和作用 智能限电系统通过以下功能来管理和限制用电&#xff1a…

【开发语言】层次状态机(HSM)介绍

层次状态机&#xff08;Hierarchical State Machine, HSM&#xff09;&#xff0c;从基本原理、结构设计、实现方法以及如何结合 Qt 进行具体实现等方面进行分析。 1. 层次状态机的基本原理 层次状态机是一种用于管理复杂系统行为的状态机模型&#xff0c;它通过将状态组织成…

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

深入解析 Loss 减少方式:mean和sum的区别及其在大语言模型中的应用 (中英双语)

深入解析 Loss 减少方式&#xff1a;mean 和 sum 的区别及其在大语言模型中的应用 在训练大语言模型&#xff08;Large Language Models, LLM&#xff09;时&#xff0c;损失函数&#xff08;Loss Function&#xff09;的处理方式对模型的性能和优化过程有显著影响。本文以 re…

基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人

导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境&#xff0c;整个搭建过程估计在 10 分钟左右即可完成&#xff0c;无须开发任何代码。 文中使用一篇 TiDB 文档作为本地数据源作为示…

生信技能63 - 构建gnomAD变异位点的SQLite查询数据库

将数据量巨大的gnomAD数据库,通过SQLite数据库寻找gnomAD中存在的各种变异注释信息(如等位基因计数,深度,次要等位基因频率等),查询300.000个变量的查询需要大约40秒,通过染色体编号+位置+REF+ALT即可进行快速查询。 1. gnomAD变异注释VCF文件字段 gnomAD VCF各版本包…

【前端】将vue的方法挂载到window上供全局使用,也方便跟原生js做交互

【前端】将vue的方法挂载到window上供全局使用&#xff0c;也方便跟原生js做交互 <template><div><el-button click"start">调用方法</el-button></div> </template> <script> // import { JScallbackProc } from ./JScal…

基于XML的AOP开发

AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意思为面向切面编程。 AOP相关术语&#xff1a; 目标对象(Target)&#xff1a; 你要去代理的对象&#xff0c;可以理解为之前很单纯的那个对象。 代理对象(Proxy)&#xff1a; 你把你那个单纯的对象给我&#xff0c…

记录blender学习过程中遇到的问题

物体发射的方向不对 被发射物体&#xff08;例如一棵树&#xff09;n键看旋转归0 切换正视图 将被发射物体的局部坐标的Z轴 指向 全局方向的X轴时 并且把粒子系统设置的物体旋转勾选上 方向就对了 做倒角发现有问题 检查缩放应用、面朝向、有没有重合点&#xff08;融合点&am…

Ubuntu系统中Redis的安装步骤及服务配置

目录 内容概括 系统环境 安装方式 1、apt包管理器安装 &#xff08;1&#xff09;安装redis服务 &#xff08;2&#xff09;安装客户端&#xff08;进入命令行操作使用&#xff0c;包含redis-cli&#xff09; &#xff08;3&#xff09;安装检验 &#xff08;4&#xf…

半导体设备中的微型导轨应如何选择合适的润滑油?

微型导轨的润滑对于保证其高精度和高稳定性至关重要&#xff0c;尤其是在半导体设备中&#xff0c;微型导轨的润滑油选择需要考虑多个因素&#xff0c;以确保设备的最佳性能和寿命。以下是一些关键点&#xff1a; 1、黏度&#xff1a;润滑油的黏度是影响其流动性和润滑效果的重…

RocketMq详解:六、RocketMq的负载均衡机制

上一章&#xff1a;《SpringBootAop实现RocketMq的幂等》 文章目录 1.背景1.1 什么是负载均衡1.2 负载均衡的意义 2.RocketMQ消息消费2.1 消息的流转过程2.2 Consumer消费消息的流程 3.RocketMq的负载均衡策略3.1 Broker负载均衡3.2 Producer发送消息负载均衡3.3 消费端的负载均…

yocto的xxx.bb文件在什么时候会拷贝文件到build目录

在 Yocto 中&#xff0c;.bb 文件用于描述如何构建和安装一个软件包&#xff0c;而文件在构建过程中的拷贝操作通常会在某些特定的步骤中进行。具体来说&#xff0c;文件会在以下几个阶段被拷贝到 build 目录&#xff08;或者更准确地说&#xff0c;拷贝到目标目录 ${D}&#x…

主打极致性价比,AMD RX 8600/8800显卡定了

*以下内容仅为网络爆料及传闻&#xff0c;一切以官方消息为准。 这谁能想到&#xff0c;率先掏出下一代桌面独立显卡的不是老大哥 NVIDIA&#xff0c;也不是 AMD&#xff0c;反而是三家中存在感最弱的 Intel&#xff01; 就在 12 月 3 日&#xff0c;Intel 正式发布了自家第二…

数组哪些方法会触发Vue监听,哪些不会触发监听

发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 在 Vue 中&#xff0c;数组的变化是通过 响应式 系统来监听的。Vue 使用 getter 和 setter 来追踪数组的变化&#xff0c;并在数…

npm, yarn, pnpm之间的区别

前言 在现代化的开发中&#xff0c;一个人可能同时开发多个项目&#xff0c;安装的项目越来越多&#xff0c;所随之安装的依赖包也越来越臃肿&#xff0c;而且有时候所安装的速度也很慢&#xff0c;甚至会安装失败。 因此我们就需要去了解一下&#xff0c;我们的包管理器&#…

工业检测基础-工业相机选型及应用场景

以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据&#xff1a; 2D相机 检测原理&#xff1a;基于二维图像捕获&#xff0c;通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景&#xff1a;广泛应用于平面工件的外观检测&#xff0c;如检测…

C语言连接数据库

文章目录 一、初始化数据库二、创建数据库连接三、执行增删改查语句1、增删改2、查 四、执行增删改查语句 接下来我简单的介绍一下怎么用C语言连接数据库。 初始化数据库创建数据库连接执行增删改查语句关闭数据库连接 一、初始化数据库 // 数据库初始化 MYSQL mysql; MYSQL* r…

优化LabVIEW数据运算效率的方法

在LabVIEW中进行大量数据运算时&#xff0c;提升计算效率并减少时间占用是开发过程中常遇到的挑战。为此&#xff0c;可以从多个角度着手优化&#xff0c;包括合理选择数据结构与算法、并行处理、多线程技术、硬件加速、内存管理和界面优化等。通过采用这些策略&#xff0c;可以…