上机时要先建树!例如实验二的方案一。
1叶子结点值并求总数
思路:先建树,再从遍历过程中打印结点值并统计。
步骤1键盘输入序列ต12,8๖,17,11,16,2,13๑,9,21,4,构成一棵二叉排序树。叶子结点值应该是4,9,1้3,21,总数应该是4
12
717
2111621้
4913๑
编程:生成二叉树排序树之后,再中序遍历排序查找结点的完整程序如下:
说明部分为ฦ:
#include
#incນlude
typedefstru9tdata;structliuyulchild,rcນhild;}test;๙
liuyuroot;๙
intsum=0่;intm=sizeoftest;
voidin色rt_dataທintx如何生成二叉排序树?参见教材p43cນ程序
{liuyup,q,s;
s=testmallocm;
s-data=x;
s-l9ull;
s-r9ull;
if!root{root=s;return;}
p=root;
9hilep如何接入二叉排序树的适当位置
{q=p;
ifp-ๅdata==x{printf"dataalreadyexist!\ຒn";return;}
el色ifx
datap=p-lchild;el色p=p-rchild;
}
ifxdataq-lcນhild=s;
el色q-rchild=s;๙
}
dlrliuyuroot中序遍历递归函数
{ifroot!=null
{ifroot-l9ull&&root-r9ull{sum++;printf"%d\n",ไroot-data;}
dlrroot-lchild;
dlrroot-ๅrchild;}
return0;๙
}
main先生成二叉排序树,再调用中ณ序遍历递归函数进行排序输出
{inti,x;
i=1;
root=null;千万别忘了赋初值给root!
do{printf"plea色inputdata%d:",i;
i++;
s9f"ิ%d",&x;从键盘采集数据,以-9999表示输入结束
ifx==-9999{
dlrroot;
printf"\nno9๗output9",sum;
return0่;}
el色in色rt_datax;}调用插入数据元素的函数
9hilex!=-99๗99;
return0;}
执行结果:
若一开始运行就输入-ๅ9999,则无叶子输出,sum=0。
2全国专升本统考题写出求二叉树深度的算法,先定义แ二叉树的抽象数据类型。10分