2018年西安电子科技大学网络与信息安全学院951数据结构考研核心题库
● 摘要
一、算法设计题
1. 当一棵有n(
) 个结点的二叉树按顺序存储方式存储在
中时,试写一个算法,求
出二叉树中结点值分别为X 和Y 的两个结点的最近公共祖先结点的值。
【答案】算法如下:
二叉树顺序存储在数组
中,本算法求结点i 和j 的最近公共祖先结点的值
下标为i 的结点的双亲结点的下标
下标为j 的结点的双亲结点的下标
所査结点的最近公共祖先的下标是
,值是
设元素类型为
整型
2. 在一棵以二叉链表表示的二叉树上,试写出按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目的算法。
【答案】算法如下:
层次遍历二叉树,并统计度为1的结点的个数
统计度为1的结点的个数
是以二叉树结点指针为元素的队列
出队,访问结点
度为1的
结点
非空左子女入队
非空右子女入队
返回度为1的结点的个数
3. 在输入数据无序的情况下,建立一个数据值为整型的递增有序的顺序存储线性表L ,且要求当输入相同数据值时,线性表中不能存在数据值相同的数据元素,试写出其算法。
顺序存储结构的线性表描述为:
线性表可能达到的最大长度};
【答案】算法如下:
//在顺序表a 中査找值为x 的元素,査找成功返回0值,否则返回查找失败时的较大下标值
//当査找失败时,low =high +
1
//结束对分査找函数
//本过程生成顺序表
L
//顺序表L 初始化
//设x =9999时退出输入
//去查找x 元素
//不同元素才插入
//插入元素x ,线性表长度增
1
//结束过程creat
4. 编写算法,求二叉树的宽度。
【答案】算法如下:
求二叉树bt 的最大宽度
空二叉树宽度为
Q 是队列,元素为二叉树结点指针,容量
足够大
front 为队头指针,rear 为队尾指针
last 为同层最右结点在队列中的位置
temp 记当前层宽度,maxw 记最大宽度
根结点入队
同层元素数加
1
左子女入队
右子女入队
一层结束
指向下层最右元素
更新当前最大宽度
5. 设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。
【答案】(1)递归算法如下:
递减序输出二叉排序树t 中所有左子树为空右子树非空的结点数据域的值
(2)非递归算法如下:
递减序输出二叉排序树t 中所有左子树为空、右子树非空的结点的数据域的值
S 是二叉排序树结点指针的栈,容量足够大
沿右分支向下
去左分支
算法结束
二、应用题
6. 已知有6个顶点(顶点编号为0--5) 的有向带权图G , 其邻接矩阵A 为上三角矩阵, 按行为主序(行优先) 保存在如下的一维数组中。
要求: