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例,用先根遍历。