2018年北京市培养单位生命科学学院864程序设计之数据结构考研核心题库
● 摘要
一、算法设计题
1. 请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink —rlink 法存储。
【答案】算法如下:
判断二叉树是否是二叉排序树,本算法结束后,在调用程序中由flag 得出结论
中序遍历左子树
中序遍历的第一个结点不必判断
前驱指针指向当前结点
不是完全二叉树
中序遍历右子树
算法结束
判断二叉树t 是否是二叉排序树,若是,返回true ,否则,返回
false
若左右子树均为二叉
排序树
左子树中的最大值和右子树中
的最小值
不是二叉排序树
结束
求二叉树左子树的最大值
返回机器最小整数
求二叉树右子树的最小值
返回机器最大整数
2. 元素集合已存入整型数组树T 的非递归算法:CSBT(r,A)
【答案】算法如下:
以存储在数组K 中的n 个关键字,建立一棵初始为空的二叉排序
树
在调用时,
T=null
f 是P 的双亲
申请结点空间
根结点
左子女
右子树根结点的值大于等于根
结点的值
算法结束
3. 写出算法,求出中序线索二叉树中给定值为X 的结点之后继结点,返回该后继结点的指针。线索树中结点结构为;
。其中,data 存放结点的值;lc 、rc 为指向左、
右孩子或该结点前驱、后继的指针,ltag 、rtag 为标志域,若值为0, 则lc 、rc 为指向左、右孩子的指针;若值为1,则lc 、rc 为指向其前驱、后继结点的指针。
【答案】算法如下:
先在带头结点的中序线索二叉树T 中査找给定值为x 的结点,假定值为x 的结点存在
设P 指向二叉树的根结点
结束
后继结点
首先在T 树上査找给定值为x 的结点,由p 指向
' 若P 的右标志为1, 则P 的rc 指针指向其后继
结点P 的右子树中最左边的结点是结点P 的中序后继
中,试写出依次取A 中各值构造一棵二叉排序
在中序线索二叉树T 中,, 求给定值为x 的结点的
结库.
4. 用邻接多重表存储结构,编写FERST-ADJ(G,V) 函数,函数返回值为第一个邻接点,若V 没有邻接点,返回零。
【答案】算法如下:
在邻接多重表g 中,求v 的第一邻接点, 若存在,返回第一邻接点,否则返回
确定顶点v 在邻接多重表向量中的下标, 不考虑不存在v 的情
况
返回第一邻接点,
和
中必有一个等于
i
取第一个边结点
5. 设排序二叉树中结点的结构为下述三个域构成:
Data :给出结点数据的值;left :给出本结点的左儿子结点的地址;right :给出本结点的右儿子结点的地址。设data 域为正整数,该二叉树根结点地址为T 。现给出一个正整数x 。请编写非递归程序,实现将data 域之值小于等于x 的结点全部删除掉。
【答案】算法如下:
非递归删除以r 为根的二叉排序树
栈,容量足够大,栈中元素是二叉排序树结点的指针
沿左分枝向下
出栈,沿栈顶结点的右子树向下刪除,释放被删除结点空间
在二叉排序树T 中删除所有小于等于x
的结点
根结点的值小于等于
x
删除二叉树p ,删除持续到" 根" 结点值大于x 或T 为空树为止
沿根结点左分支向下,査小干等于x 的结点
q 记P 的双亲
结点的值小于等于x