《数据结构 - C语言描述》习题及答案-耿国华-2 下载本文

void DelTree(BiTree bt, DataType x) { if ( bt )

{ if (bt->LChild && bt->LChild->data==x)

{ FreeTree(bt->LChild); bt->LChild=NULL; }

if (bt->RChild && bt->RChild->data==x)

{ FreeTree(bt->RChild); bt->RChild=NULL; }

DelTree(bt->LChild, x); DelTree(bt->RChild, x); } }

[方法2]:(1)先序查找;(2)直接查看当前根结点(3)用指针参数;

[方法3]:(1)先序查找;(2)直接查看当前根结点

(3)通过函数值,返回删除后结果;

(参示例程序)

14.分别写函数完成:在先序线索二叉树T中,查找给定结

点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。 [提示]:

(1)先查看线索,无线索时用下面规律:

(2)结点*p在先序序列中的后继为其左子或右子; (3)结点*p在后序序列中的前驱也是其左子或右子。 15.分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。(参例题)

16.编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。 [提示]:

(1)可将孩子-兄弟链表划分为根、首子树、兄弟树,递归处理。

(2)可利用返回值,或全局变量。

17.对以孩子-兄弟链表表示的树编写计算树的深度的算法。 18.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出后序遍历非递归的算法。 (参课本)

19.设二叉树按二叉链表存放,写算法判别一棵二叉树是否是一棵正则二叉树。正则二叉树是指:在二叉树中不存在子

树个数为1的结点。

[提示]:可利用任何递归、非递归遍历算法。

20.计算二叉树最大宽度的算法。二叉树的最大宽度是指:二叉树所有层中结点个数的最大值。

21.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。

22. 证明:给定一棵二叉树的前序序列与中序序列,可唯一确定这棵二叉树;

给定一棵二叉树的后序序列与中序序列,可唯一确定这棵二叉树;

23. 二叉树按照二叉链表方式存储,编写算法将二叉树左右子树进行交换。

实习题

1. [问题描述] 建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。 [基本要求] 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行遍历(先序、中序、后序),然后将遍历结果打印输出。要求采用递归和

非递归两种方法实现。

[测试数据] ABCффDEфGффFффф(其中ф表示空格字符)

输出结果为: 先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA

2.已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的竖向显示(竖向显示就是二叉树的按层显示)。 [提示]:

(1)参习题6.20,实现逐层遍历

(2)队中保存每个结点的打印位置,其左、右子的距离 3.如题1要求建立好二叉树,按凹入表形式打印二叉树结构,如图6.34所示。

A

B C

D E

图6.34

C F E A D B

4.按凹入表形式打印树形结构,如图6.35所示。 [提示]:参P.129例,用先根遍历。