广东财经大学考研初试数据结构历年真题分类:树

107 阅读10分钟

按试卷题型

选择题

[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的完全二叉树编号,则编号最小的叶结点的编号是( )。

A2k11B2k1C2k2+1D2k1A.2^{k-1}-1 \quad B.2^{k-1} \quad C.2^{k-2}+1\quad D.2^{k}-1

[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;   //全局变量s2代码
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 

DataStructure-GDEF_PostGraduate_Exam_Question_2023_2_1.png

根据以上描述回答问题:

(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的二叉树转变为多叉树或森林。

DataStructure-GDEF_PostGraduate_Exam_Question_2022_3_1.png

[2022年第4题]. 对于图-3的AVL树(平衡树),依次插入关键字35,28。

(1)请画出插入关键字35后AVL树的形状。

(2)请画出随后再插入关键字28后AVL树的形状。

DataStructure-GDEF_PostGraduate_Exam_Question_2022_3_4.png

[2021年分析计算题第1题]. 设一棵二叉树的中序序列是:BDEAFGCKH,后序序列是:EDBGFKHCA。

(1)写出该二叉树的先序序列。

(2)画出该二叉树的中序线索二叉树

(3)将这棵二叉树转换成树或森林。

[2021年分析计算题第3题]. 假设Bt是元素值为字符的二叉链表,其数据结构的表示以及test函数的调用如图-3所示,用图-4所示的二叉链表 Bt 调用test函数。

DataStructure-GDEF_PostGraduate_Exam_Question_2021_3_3.png

(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题]. 字符及其在报文中出现的频率如下表:

字符CASTE
频率38456

利用 Huffman 树,为这些字符设计一组最优二进制编码,要求:

(1)请在答题纸上绘出 Huffman 树,并且按 Huffman 编码规则在该树的每个分支上标上“0”或“1”。 为了使答案唯一,请将 Huffman 树上每一层结点的权值按左小右大排列;

(2)并在答题纸上自行绘制和填写下表;

字符CASTE
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) 。

DataStructure-GDEF_PostGraduate_Exam_Question_2022_4_4.png

#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语言写出函数代码,并且加上适当注释,以增加可读性。