按试卷题型
选择题
[2024年第3题]. 若一颗3次树中有a个度为1的节点,b个度为2的节点,c个度为3的节点,则该树中有( )个叶子节点。 A. 2b + 3c B. 1 + 2b + 3c C. 1 + b + 2c D. a + 2b + 3c
[2024年第6题]. 在以下存储形式中,( )不是m叉树(m>2)的存储形式? A. 顺序存储表示法 B. 孩子链表表示法 C. 孩子兄弟表示法 D. 双亲表示法
[2024年第9题]. 以下关于二叉树遍历的说法中,正确的是( )
A. 若一个叶子结点是二叉树中某个子树的中序序列的最后一个结点,则它一定是该子树先序序列的最后一个结点
B. 若某结点是二叉树中某个子树的中序序列的最后一个结点,则它一定是该子树先序序列的最后一个结点
C. 若一个叶子结点是二叉树中某个子树的先序序列的最后一个结点,则它一定是该子树中序序列的最后一个结点
D. 若某结点是二叉树中某个子树的先序序列的最后一个结点,则它一定是该子树中序序列的最后一个结点
[2023年第6题]. 设给定权值总数有n个,其哈夫曼树的结点总数为( ) 个。
A.不确定 B.2n C.2n+1 D.2n-1
[2022年第7题]. 一棵非空二叉树的先序遍历序列和中序遍历序列相同,则该二叉树一定满足( )。
A.所有的结点均无左孩子 B.所有的结点均无右孩子
C.只有一个叶子结点 D.不存在这样的二叉树
[2022年第8题]. 按照满二叉树的编号顺序对深度为k的完全二叉树编号,则编号最小的叶结点的编号是( )。
[2022年第9题]. 一棵完全二叉树的第7层有24个叶子结点,则整个二叉树的结点数至多为( )个
A.87 B.206 C.207 D.231
[2021年第7题]. 按照从上至下、由左至右的顺序依次编号,深度为7的完全二叉树编号最大的叶结点编号是( )。
A.63 B.64 C.126 D.127
[2021年第8题]. 已知完全二叉树的第7层有20个叶结点,则该二叉树最多有( )个结点。
A.83 B.147 C.214 D.215
[2021年第9题]. 设F是一个森林,B是由F变换得到的二叉树。若F中有n个非终端,则B中右指针域为空的结点有( )个。
A. n-1 B. n C. n+1 D. n+2
[2021年第10题]. 由权值为15,3,5,10的四个叶结点构成的哈夫曼树的带权路径长度为( )。
A.46 B.59 C.66 D.88
[2021年第15题]. 关于B-树和B+树的叙述不正确的是( )。
A.B-树和B+树都是平衡的多叉树
B.B-树和B+树都可用于文件的索引结构
C.B-树和B+树都能有效支持顺序检索
D.B-树和B+树都能有效支持随机检索
[2020年第7题]. 二叉树是非线性数据结构,所以_________。
A.它不能用顺序存储结构存储
B.它不能用链式存储结构存储
C.顺序存储结构和链式存储结构都能存储
D.顺序存储结构和链式存储结构都不能使用
[2019年第7题]. 对二叉树的结点从 1 开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用________遍历实现编号。
A.先序 B.中序 C. 后序 D. 从根开始按层次遍历
[2019年第8题]. 下面关于 B-和 B+树的叙述中,不正确的是________。
A.B-树和 B+树都是平衡的多叉树
B.B-树和 B+树都可用于文件的索引结构
C.B-树和 B+树都能有效地支持顺序检索
D.B-树和 B+树都能有效地支持随机检索
填空题
[2021年第3题]. 如果已知二叉树的( )和( )遍历序列,可以唯一确定该二叉树。
[2021年第6题]. 一棵高度为5的理想平衡树中,最少含有( )个结点,最多含有( )个结点。
[2021年第7题]. 通过将树的( )存储方式转换为( )存储方式,可以利用已有的算法解决树的问题。
[2021年第8题]. 已知一颗完全二叉树中共有768结点,则该树中共有( )个叶子结点。已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树中有( )个叶子结点。
[2019年第4题]. 一棵完全二叉树的第六层有 10 个叶子结点,则整个二叉树的结点总数为数至多为________。
[2019年第5题]. 已知二叉树的二叉链表的类型定义如下:
typedef struct node {
TElemType data;//数据域
Struct node *lchild, *rchild;//指向左、右孩子的指针域
}BiTNode, *BiTree
有如下函数所描述的算法,它试图求出二叉树的结点总数,请写出下划线处应填写的语句(仅限一个语句)。
int NodeCount( BiTree T ) {
if(T==NULL) return 0; // 如果是空树,则结点个数为 0,递归结束
else ___________________________________________;
//否则结点个数为左子树的结点个数+右子树的结点个数+1(根节点)
}
名词解释
[2022年第8题]. 平衡树
[2020年第9题]. 二叉树的线索化
简答题
[2023年第1题]. 以下是二叉链表存储结构的表示,s是初值为0的全局变量。假设已经用二叉链表实现了如图1所示的二叉树的存储,指针root 指向其根结点。函数func( )的代码如图2所示:
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
} *BiTree; //二叉链表定义
int s = 0; //全局变量s
图2代码
int func(BiTree T) {
if (T) {
func(T->lchild);
if (T->data % 2 != 0)
printf("%d\t", T->data + 10);
else s += T->data;
func(T->rchild);
return s;
}//if
}//func
根据以上描述回答问题:
(1)递归算法必须包括哪几个部分? (2分)
(2)描述func( )函数的基本功能,并说明该函数的递归终止条件。(4分)
(3)执行语句printf(“\n%d\n”,func(root))后,按屏幕格式写出相应的输出结果。(4分)
[2023年第2题]. 设一棵二叉树的先序序列是:A B D E G C F H K,中序序列是:D B G E A C H F K。
(1)写出这棵二叉树的后序序列。 (3分)
(2)画出这棵二叉树的中序线索二叉树。 (3分)
(3)将这棵二叉树转换为对应的树(或森林)。 (4分)
[2022年第1题]. 二叉树和多叉树的转换。
(1)请将如下图-1的多叉树转变为二叉树;
(2)将图-2的二叉树转变为多叉树或森林。
[2022年第4题]. 对于图-3的AVL树(平衡树),依次插入关键字35,28。
(1)请画出插入关键字35后AVL树的形状。
(2)请画出随后再插入关键字28后AVL树的形状。
[2021年分析计算题第1题]. 设一棵二叉树的中序序列是:BDEAFGCKH,后序序列是:EDBGFKHCA。
(1)写出该二叉树的先序序列。
(2)画出该二叉树的中序线索二叉树。
(3)将这棵二叉树转换成树或森林。
[2021年分析计算题第3题]. 假设Bt是元素值为字符的二叉链表,其数据结构的表示以及test函数的调用如图-3所示,用图-4所示的二叉链表 Bt 调用test函数。
(1)简述test函数的功能。
(2)尽量按屏幕显示格式写出运行结果。
(3)调用test的次数是多少?
[2020年第1题]. 设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C
(1)画出这棵二叉树; (2)将这棵二叉树转换成对应的树(或森林)。
[2020年第2题]. 字符及其在报文中出现的频率如下表:
| 字符 | C | A | S | T | E |
|---|---|---|---|---|---|
| 频率 | 3 | 8 | 4 | 5 | 6 |
利用 Huffman 树,为这些字符设计一组最优二进制编码,要求:
(1)请在答题纸上绘出 Huffman 树,并且按 Huffman 编码规则在该树的每个分支上标上“0”或“1”。 为了使答案唯一,请将 Huffman 树上每一层结点的权值按左小右大排列;
(2)并在答题纸上自行绘制和填写下表;
| 字符 | C | A | S | T | E |
|---|---|---|---|---|---|
| Huffman 编码 |
(3)若接收到 1001100,这样一串 Huffman 编码,请写出其译码结果。
(4)计算其 WPL 值。
[2019年第1题]. 设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C
(1)画出这棵二叉树。
(2)画出这棵二叉树的后序线索树。
(3)将这棵二叉树转换成对应的树(或森林)。
[2019年第2题]. 假设用于通信的电文仅由 8 个字母组成,字母在电文中出现的概率分别为 0.07,0.19,0.02,0.06,0.32,0.03, 0.21,0.10。
(1)试为这 8 个字母设计赫夫曼(Huffman)编码。
(2)从数学期望的角度计算各字符赫夫曼编码的平均长度;若这 8 个字母采用二进制等长编码,各字符的平均编码长度至少是多大?
(3)简述赫夫曼编码的特点以及它试图达到目标。
编程题
[2022年第4题]. 以下二叉树相关的程序中,函数TravLevel(BTNode *b)是对二叉树按层次遍历,例如对于如图-5所示的树b,TravLevel( b )的结果是输出“A B C D E F G H”。请补全程序中 (1) 和 (2) 和 (3) 空缺的部分,每个空格填入一条语句。函数XYZ(BTNode *b)的功能未知,若以如图-5所示的树b作为输入参数,则XYZ( b )的输出是 (4) ,函数XYZ(BTNode *b)的功能是 (5) 。
#define MaxSize (100)
typedef char ElementType;
typedef struct TreeNode {
ElementType Element;
struct TreeNode *Left;
struct TreeNode *Right;
} BTNode;
void TravLevel(BTNode *b) {
BTNode *Queue[MaxSize];//循环队列
int front, rear;//定义队首和队尾指针
front=rear=0;//置队列为空队列
rear++;
Queue[rear]=b;//根节点入队
while ( (1) ) {//队列不为空
front=(front+1) % MaxSize;
b=Queue[front];//队首元素出队
printf("%c ",b->Element);
if (b->Left!=NULL) {//左孩子入队
rear=(rear+1) % MaxSize;
(2) ;
}
if (b->Right!=NULL) {//右孩子入队
rear=(rear+1) % MaxSize;
(3) ;
}
}
}
void XYZ(BTNode *b) {
BTNode *Stack[MaxSize], *p;
int top = -1;
if (b!=NULL) {
top++;
Stack[top]=b;//根节点入栈
while (top > -1) {//栈非空时循环
p=Stack[top];
top--;
printf("%c ",p->Element);
if (p->Right!=NULL) {
top++;
Stack[top]=p->Right;
}
if (p->Left!=NULL) {
top++;
Stack[top]=p->Left;
}
}
}
}
[2020年第2题]
已知二叉链表的类型定义如下:
typedef struct BitNode {
TElemType data;
Struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;
已知二叉树 T 用二叉链表,试用递归方法编写函数计算 T 中叶子结点的数目。请用类C语言写出函数代码,并且加上适当注释,以增加可读性。