2017年天津职业技术师范大学数据结构考研复试核心题库
● 摘要
一、应用题
1. 二叉树的带权路径长度(WPL )是二叉树中所有叶结点的带权路径长度之和,给定一棵二叉树T ,采用二叉链表存储,节点结构为:
其中叶节点的weight 域保存该结点的非负权值。设root 为指向T 的根节点的指针,设计求T 的WPL 的算法。要求:
(1)给出算法的基本设计思想;
(2)使用C 或C++语言,给出二叉树结点的数据类型定义;
(3)根据设计思想,采用C 或C++语言描述算法,关键之处给出注释。
【答案】(1)算法的基本思路是利用利用递归的思想来求解二叉树的带权路径长度,如果当前节点不是叶子节点,那么当前节点为根的树的带权路径长度便等于它的子树的带权路径长度之和,对于此函数要传入一个当前节点的树高的形参,那么递归调用孩子节点时只需要将这个形参加一即可。
(2)
typedef struct BiNode
(3)具体算法实现如下:
如果当前节点为空节点
//如果当前节点的左右孩子节点都为空,即当前节点为叶子节点,直接返回当前节点的
WPL
//如果当前节点不是叶子节点,则对当前节点的左右子树进行递归,返回左右子树WPL 之和
2. 在堆排序、快速排序和合并排序中:
(1)若只从存储空间考虑,则应首先选取哪种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?
(2)若只从排序结果的稳定性考虑,则应选取哪种排序方法? (3)若只从平均情况下排序最快考虑,则应选取哪种排序方法?
(4)若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法? 【答案】(1)应首先选取堆排序方法,其次选取快速排序方法,最后选取归并排序方法。 (2)应选取归并排序方法 (3)应选取快速排序方法 (4)应选取堆排序方法
3. 设二叉树BT 的存储结构如表:
表 二叉树BT 的存储结构
其中BT 为树根结点的指针,其值为6, Lchild 、Rchild 分別为结点的左、右孩子指针域data 为结点的数据域。试完成下列各题:
(1)画出二叉树BT 逻辑结构;
(2)写出按前序、中序、后序遍历该二叉树所得到的结点序列: (3)画出二叉树的后序线索树。
【答案】(1)二叉树的逻辑结构如图1所示:
图1
(2)前序序列:ABCEDFHGIJ 中序序列:ECBHFDJIGA 后序序列:ECHFJIGDBA
(3):二叉树的后续线索树如图2所示:
图2
4. 假定在一个8位字长的计算机中运行下列C 程序段:
若编译器编译时将8个8位寄存器R1〜R8分别分配给变量回答下列问题。(提示:带符号整数用补码表示)
(1)执行上述程序段后,寄存器Rl 、R5和R6的内容分别是什么?(用十六进制表示) (2)执行上述程序段后,变量m 和kl 的值分别是多少?(用十进制表示)
(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现? 简述理由。
(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出? 上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
【答案】(1)无符号整数运算,(Rl ) =x=134=10000110B=86H、(R5)=x-y=246=10010000B=90H、(R6)=x+y=01111100B=7CH。
(2) m 的机器数与x 的机器数相同为86H=1000 0110B,解释为带符号整数(用补码表示)时,其值为-111 1010B= -112; 同理kl=(m-n )=(x-y )=90H=1001 0000B,解释为带符号整数(用补码表示)时,其值为-111 1010B=-112;
(3)四种运算可以利用同一个加法器及辅助电路实现,n 位加法器实现的是模2n 无符号整数加法运算。对于无符号整数a 和b , a+b可以直接用加法器实现,而
实现;
对于带符号整数用补码表示,补码加减运算公式为:
请