上机时要先建树!例如实验二的方案一。
1叶子结点值并求总数
思路:先建树,再从遍历过程中打印结点值并统计。
步骤1键盘输入序列12,8,1้7,11,16,2,13๑,9,21,4,构成一棵二叉排序树。叶子结点值应该是4,9,13,21,ไ总数应该是4๒
12
717
2111621้
4913
编程:生成二叉树排序树之后,再中ณ序遍历排序查找结点的完整程序如下:
说明部分为ฦ:
#include
#include
typedefstru9tdata;structliuyulcນhild,rchild;}test;
liuyuroot;๙
intsum=0;intm=sizeoftest;
voidin色rt_ຕdataintx如何生成二叉排序树?参见教材p43c程序
{liuyup,q,s;๙
s=testmallocm;
s-data=x;๙
s-l9๗ull;
s-r9ull;
if!root{root=s;return;}
p=root;
9hilep如何接入二叉排序树的适当位置
{q=p;
ifp-data==x{printf"dataທalreaທdyexist!\n";return;๙}
el色ifx
datap=p-lchild;el色p=p-rchild;
}
ifxdataq-lchild=s;
el色q-rcນhild=s;
}
dlrliuyuroot中序遍历递归函数
{ifroot!ำ=null
{ifroot-l9ull&ุ&root-r9ull{sum++;printf"%d\n",root-daທta;}
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==-9๗999{
dlrroot;
printf"\nno9๗output9",sum;
return0;}
el色in色rt_datax;}调用插入数据元素的函数
9hilex!=-99๗99;
return0;}
执行结果:
若一开始运行就输入-9999,则无叶子输出,sum=0。
2๐全国专升本统考题写出求二叉树深度的算法,先定义二叉树的抽象数据类型。10่分