设计思想:
(1) 存储结构。
采用二叉链表的存储结构。二叉链表的每个结点有一个数据域和两个指针域,一个指针指向左孩子,另一个指针指向右孩子。结点结构如下:
ypedef struct Bnode
{
ElemType data;
struct Bnode *lch,*rch;
}Bnode;
Bnode为二叉树结点类型标识符。
(2) 主要算法基本思想。
本程序利用两种方法建立二叉树,第一种是利用二叉树性质5,借助一维数组v建立二叉树。然后可以利用中根遍历方法统计叶子结点个数和结点总数。利用二叉树的先序遍历递归计算出树深。
1) 在二叉树t中,插入一个结点p的递归算法。
用性质5建立二叉树方法分析(方法一):输入结点的序号和数值域,当输入的结点的序号和数值域不为空的情况下,就会开辟一个结点的空间,然后把刚刚输入的结点的数据放到开辟的结点的数值域中,把左孩子和右孩子都赋值为空。然后再根据性质5找出这个结点的父母结点,然后自动连接起来。本算法循环的结束条件是输入的两个数据都为零,即i,x都为零时不再分配新结点跳出循环体。
设计表示:
(1) 函数声明和规格说明。
Bnode *creat_bt0(); 利用性质5建立二叉树。
void preorder(Bnode *p); 先根遍历二叉树。
void injishu(Bnode *t); 统计结点总数和叶子结点个数
void predeep(Bnode *t,int i); 二叉树的树深算法