第2章

上机时要先建树!例如实验二的方案一。

1叶子结点值并求总数

思路:先建树,再从遍历过程中打印结点值并统计。

步骤1键盘输入序列ต12,8๖,17,11,16,2,13๑,9,21,4,构成一棵二叉排序树。叶子结点值应该是4,9,1้3,21,总数应该是4

12

717

2111621้

4913๑

编程:生成二叉树排序树之后,再中序遍历排序查找结点的完整程序如下:

说明部分为ฦ:

#include

#incນlude

typedefstru9tdata;structliuyulchild,rcນhild;}test;๙

liuyuroot;๙

intsum=0่;intm=sizeoftest;

voidin色rt_dataທintx如何生成二叉排序树?参见教材p43cນ程序

{liuyup,q,s;

s=testmallocm;

s-data=x;

s-l9ull;

s-r9ull;

if!root{root=s;return;}

p=root;

9hilep如何接入二叉排序树的适当位置

{q=p;

ifp-ๅdata==x{printf"dataalreadyexist!\ຒn";return;}

el色ifx

datap=p-lchild;el色p=p-rchild;

}

ifxdataq-lcນhild=s;

el色q-rchild=s;๙

}

dlrliuyuroot中序遍历递归函数

{ifroot!=null

{ifroot-l9ull&&root-r9ull{sum++;printf"%d\n",ไroot-data;}

dlrroot-lchild;

dlrroot-ๅrchild;}

return0;๙

}

main先生成二叉排序树,再调用中ณ序遍历递归函数进行排序输出

{inti,x;

i=1;

root=null;千万别忘了赋初值给root!

do{printf"plea色inputdata%d:",i;

i++;

s9f"ิ%d",&x;从键盘采集数据,以-9999表示输入结束

ifx==-9999{

dlrroot;

printf"\nno9๗output9",sum;

return0่;}

el色in色rt_datax;}调用插入数据元素的函数

9hilex!=-99๗99;

return0;}

执行结果:

若一开始运行就输入-ๅ9999,则无叶子输出,sum=0。

2全国专升本统考题写出求二叉树深度的算法,先定义แ二叉树的抽象数据类型。10分