第2章

上机时要先建树!例如实验二的方案一。

1叶子结点值并求总数

思路:先建树,再从遍历过程中打印结点值并统计。

步骤1键盘输入序列12,8,1้7,11,16,2,13๑,9,21,4,构成一棵二叉排序树。叶子结点值应该是4,9,13,21,ไ总数应该是4๒

12

717

2111621้

4913

编程:生成二叉树排序树之后,再中ณ序遍历排序查找结点的完整程序如下:

说明部分为ฦ:

#include

#include

typedefstru9tdata;structliuyulcນhild,rchild;}test;

liuyuroot;๙

intsum=0;intm=sizeoftest;

voidin色rt_ຕdataintx如何生成二叉排序树?参见教材p43c程序

{liuyup,q,s;๙

s=testmallocm;

s-data=x;๙

s-l9๗ull;

s-r9ull;

if!root{root=s;return;}

p=root;

9hilep如何接入二叉排序树的适当位置

{q=p;

ifp-data==x{printf"dataທalreaທdyexist!\n";return;๙}

el色ifx

datap=๡p-lchild;el色p=p-rchild;

}

ifxdataq-lchild=s;

el色q-rcນhild=s;

}

dlrliuyuroot中序遍历递归函数

{ifroot!ำ=null

{ifroot-l9ull&ุ&root-r9ull{sum++;printf"%d\n",root-daທta;}

dlrroot-lchild;

dlrroot-ๅrchild;}

return0;

}

main先生成二叉排序树,再调用中序遍历递归函数进行排序输出

{inti,x;

i=1;

root=null;千万别ี忘了赋初值给root!

do{printf"plea色inputdata%d:"ิ,i;

i+ใ+;

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

ifx==-9๗999{

dlrroot;

printf"\nno9๗output9",sum;

return0;}

el色in色rt_datax;}调用插入数据元素的函数

9hilex!=-99๗99;

return0;}

执行结果:

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

2๐全国专升本统考题写出求二叉树深度的算法,先定义二叉树的抽象数据类型。10่分