上机时要先建树!8๖。
步骤1้键盘输入序列12:4,再从遍历过程中打印结点值并统计。
1叶子结点值并求总,例ã,构๐,,16,2๐,13,9,21,先,1้7。11,9,13,ไ21,ไ总数应该是4๒
12๐
717
211้1621้
4913
编程:生成二叉树排序树之后,
说明部分为ฦ:再中序遍历排序:
#include
#include
typedefstru9tdata;structliuyulchild,rchild;}test;๙
liuyuroot;
intsum=0;intm=sizeoftest;
voidin色rt_ຕdataintx如何生成二叉排序树?参见教材p43๑c程序
{liuyup,q,s;
s=testmallocm;
s-data=x;
s-l9๗ull;
s-r9ull;
if!root{root=s;return;}
p=root;
9๗hilep如何接入二叉排序树的适当位置
{q=p;
ifp-dataທ==x{printf"dataalreadyexist!\n";return;}
el色ifx
dataທp=p-lchild;el色p=p-ๅrchild;
}
ifxdataq-ๅlchild=s;
el色q-rchild=s;
}
dlrliuyuroot中序遍历递归函数
{ifroot!ำ=null
{ifroot-l9ull&&ุroot-ๅr9ull{sum++;๙printf"%d\n",root-data;}
dlrroot-lcນhild;
dlrroot-ๅrchild;}
return0;
}
main先生成二叉排序树,以-9999表示输入结束
ifx==-9999{
dlrroot;
printf"\nno9output9"ิ,sum;
return0;}
el色in色rt_datax;}调用插入数据元素的函数
9hilex!=-99๗99;
re,再调用中序遍历递归函数进行排序输出
{inti,x;๙
i=1;
root=null;千万别ี忘了赋初值给root!
do{printf"plea色inputdata%d:",ไi;
i+ใ+;
s9f"%d",ไ&x;从键盘采集数据:
若一开始运行就输入-999๗9,则无叶子输出,sum=0。
2๐全国专升本统考题写出求二叉树深度的算法,先定义二叉树的抽象数据类型。10่分
或严题集64๒4๒4编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。
答;设计思路:只查后继链表指针,若左或右孩子的左或右指针非空,则层次数加1;否则函数返回。
但注意,递归时应当从叶子开始向上计数,否则不易确定层数。
intdepthliuyuroot统计层数
{intd,p;注意每一层的局部变量d,p都是各自独立的
p=0;
ifroot==nullreturnp;找到เ叶子之后才开始统计
el色{
d=depthroot-lchild;๙
ifdpp=d;向上回朔时,要挑出左右子树中ณ的相对大的那个深度值
d=depthroot-rchild;