实现二叉树的各种遍历算法实验报告Word格式.docx
- 文档编号:20318417
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:18
- 大小:18.14KB
实现二叉树的各种遍历算法实验报告Word格式.docx
《实现二叉树的各种遍历算法实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《实现二叉树的各种遍历算法实验报告Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
,对于任意j≠k(1≤j,k≤m>
有Dj∩Dk=NULL,且对任意的i(1≤i≤m>
,唯一存在数据元素xi∈Di有<
root,xi>
∈H。
b5E2RGbCAP
(3>
对应于D-{root}的划分,H-{<
„,<
root,xm>
}有唯一的一个划分H1,H2,„,Hm(m>
,对任意j≠k(1≤j,k≤m>
有Hj∩Hk=NULL,且对任意i(1≤i≤m>
Hi是Di上的二元关系,(Di,{Hi}>
是一棵符合本定义的树,称为根root的子树。
p1EanqFDPw
基本操作P:
InitTree(&
T>
。
操作结果:
构造空树T。
DestroyTree(&
初始条件:
树T存在。
销毁树T。
CreateTree(&
T,definition>
definition给出树T的定义。
按definition构造树T。
ClearTree(&
将树T清为空树。
TreeEmpty(T>
若T为空树,则返回TRUE,否则返回FALSE。
TreeDepth(T>
返回T的深度。
Root(T>
返回T的根。
Value(T,cur_e>
树T存在,cur_e是T中某个结点。
返回cur_e的值。
Assign(T,cur_e,value>
结点cur_e赋值为value。
Parent(T,cur_e>
若cur_e是T的非根结点,则返回它的双亲,否则函数值为“空”。
LeftChild(T,cur_e>
若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空”。
RightSibling(T,cur_e>
若cur_e有右兄弟,则返回它的右兄弟,否则返回“空”。
InsertChild(&
T,&
p,I,c>
树T存在,p指向T中某个结点,1≤i≤p指结点的度+1,非空树c与T不相交。
插入c为T中p指结点的第i棵子树。
DeleteChild(&
p,i>
树T存在,p指向T中某个结点,1≤i≤p指结点的度。
删除T中p所指结点的第i棵子树。
TraverseTree(T,visit(>
>
树T存在,visit是对结点操作的应用函数。
按某种次序对T的每个结点调用函数visit(>
一次且至多一次。
一旦visit(>
失败,则操作失败。
DXDiTa9E3d
}ADT
Tree
3.2存储结构的定义。
typedefstructnode
{
chardata。
structnode*lchild。
structnode*rchild。
}BTNode。
3.3基本操作实现:
voidInsertnode(BTNode*&
p,int&
i,char*str>
intjudge=0。
if(str[i]>
='
A'
&
str[i]<
Z'
{
judge++。
p=(BTNode*>
malloc(sizeof(BTNode>
p->
lchild=NULL。
rchild=NULL。
data=str[i]。
i++。
}
if(str[i]=='
\0'
return。
('
if(!
judge>
Insertnode(p->
lchild,i,str>
rchild,i,str>
'
||str[i]=='
'
}
/**由STR创建二叉链**/
voidCreateBTNode(BTNode*&
b,char*str>
inti=0。
Insertnode(b,i,str>
///以递归形式插入数据,i会跟着变化
/**查找e的节点指针**/
BTNode*FindNode(BTNode*p,chare>
if(p==NULL>
returnNULL。
if(p->
data==e>
returnp。
else
BTNode*b=FindNode(p->
lchild,e>
if(b!
=NULL>
returnb。
returnFindNode(p->
rchild,e>
/**输出二叉树**/
voidDispBTNode(BTNode*b>
printf("
%c"
b->
data>
if(b->
lchild!
=NULL||b->
rchild!
"
DispBTNode(b->
lchild>
rchild!
=NULL>
printf("
,"
rchild>
)"
/**深度**/
intBTNodeDepth(BTNode*b>
if(b==NULL>
return0。
intl=BTNodeDepth(b->
intr=BTNodeDepth(b->
returnl>
r?
l+1:
r+1。
voidsearch(BTNode*p,int*a,intk>
if(p!
a[k]++。
search(p->
lchild,a,k+1>
rchild,a,k+1>
/**求二叉树的宽度**/
intBTWidth(BTNode*b>
inta[maxx],i,kmax=0。
for(i=0。
i<
maxx。
++i>
a[i]=0。
intk=0。
search(b,a,k>
if(a[i]>
kmax>
kmax=a[i]。
returnkmax。
/**求二叉树的节点个数**/
intNodes(BTNode*b>
elseif(b->
lchild==NULL&
b->
rchild==NULL>
return1。
intl=Nodes(b->
intr=Nodes(b->
returnl+r+1。
/**求叶子节点个数**/
intleafNodes(BTNode*b>
intl=leafNodes(b->
intr=leafNodes(b->
returnl+r。
voidDestroyBTNode(BTNode*&
b>
DestroyBTNode(b->
free(b>
3.4解题思路:
1树的先序遍历:
递归算法,先输出根节点,再以左子树进行递归最后以右子树进行递归。
非递归算法,用栈模拟整个递归过程。
RTCrpUDGiT
2树的中序遍历:
递归算法,先以左子树进行递归,再输出根节点,最后以右子树进行递归。
非递归算法,同上。
5PCzVD7HxA
3树的后序遍历:
递归算法,先以左子树进行递归,再后以右子树进行递归,最后输出根节点。
非递归算法,同上。
jLBHrnAILg
3.5解题过程:
实验源代码如下:
3.5.1实现二叉树的各种基本运算
#include<
iostream>
cstdio>
algorithm>
malloc.h>
#definemaxx100
usingnamespacestd。
intmain(>
BTNode*root,*p,*lp,*rp。
CreateBTNode(root,"
A(B(D,E(H(J,K(L,M(,N>
C(F,G(,I>
xHAQX74J0X
二叉树:
\n"
1)输出二叉树:
DispBTNode(root>
puts("
2)H节点:
p=FindNode(root,'
H'
lp=p->
lchild。
if(lp!
左孩子为%c"
lp->
无左孩子"
rp=p->
rchild。
if(rp!
右孩子为%c"
rp->
无右孩子"
3)二叉树的深度:
%d\n"
BTNodeDepth(root>
4)二叉树的宽带:
BTWidth(root>
5)二叉树的节点数:
%d\n"
Nodes(root>
6)二叉树的叶子节点个数:
leafNodes(root>
7)释放二叉树\n"
DestroyBTNode(root>
3.5.2二叉树的三序遍历
stdio.h>
#definemaxsize100
typedefcharElemtype。
Elemtypedata。
}BTnode。
voidCreateBTnode(BTnode*&
b,char*str>
BTnode*st[maxsize],*p=NULL。
inttop=-1,k,j=0。
charch。
b=NULL。
ch=str[j]。
while(ch!
if(ch=='
{
top++。
st[top]=p。
k=1。
}
elseif(ch=='
top--。
k=2。
else
p=(BTnode*>
malloc(sizeof(BTnode>
p->
data=ch。
lchild=p->
rchild=NULL。
if(b==NULL>
b=p。
else
{
if(k==1>
st[top]->
lchild=p。
elseif(k==2>
rchild=p。
}
j++。
ch=str[j]。
voidPreOrder(BTnode*p>
printf("
%c"
p->
PreOrder(p->
voidInOrder(BTnode*p>
InOrder(p->
voidPostOrder(BTnode*p>
PostOrder(p->
voidPreOrder1(BTnode*p>
BTnode*st[maxsize],*b。
inttop=-1。
if(p!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 二叉 各种 遍历 算法 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)