二叉树的基本操作Word下载.docx
- 文档编号:22634316
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:11
- 大小:50.88KB
二叉树的基本操作Word下载.docx
《二叉树的基本操作Word下载.docx》由会员分享,可在线阅读,更多相关《二叉树的基本操作Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
structBtreeNode{
//结点值域
BtreeNode*lchild;
//定义左孩子指针
BtreeNode*rchild;
//定义右孩子指针
};
structlnode{//定义队列结点结构用于二叉树层遍历
BtreeNode*data1;
lnode*next;
structQueue{//定义队列首尾指针
lnode*front;
lnode*back;
voidinitQueue(Queue&
Q)//初始化队列
{
==NULL;
}
voidinsertQueue(Queue&
Q,BtreeNode*item)//元素入队列
lnode*newptr=newlnode;
newptr->
data1=item;
next=NULL;
if==NULL)
==newptr;
else
=>
next=newptr;
BtreeNode*deleteQueue(Queue&
Q)//队首元素出队列
BtreeNode*temp=>
data1;
lnode*p=;
=p->
next;
=NULL;
deletep;
returntemp;
boolemptyQueue(QueueQ)//判断队列是否为空
return==NULL;
voidinitBtree(BtreeNode*&
BT)//二叉树的初始化
BT=NULL;
voidinsertBtree(BtreeNode*&
BT)//创建二叉树
elemtypech;
ch=getchar();
if(ch=='
$'
)//判断是不是结束标志
BT=NULL;
{
BT=newBtreeNode;
//创建结点
BT->
data=ch;
//赋值
insertBtree(BT->
lchild);
//左子叶递归
rchild);
//右子叶递归
}
boolemptyBtree(BtreeNode*BT)//判断二叉树是否为空
returnBT==NULL;
intdepthBtree(BtreeNode*BT)//求二叉树的深度
if(emptyBtree(BT))
return0;
else{
intdep1=depthBtree(BT->
intdep2=depthBtree(BT->
returndep1>
dep2dep1+1:
dep2+1;
//判断哪个子叶的深度最大
//树的深度为左右子叶的最大深度加上1
voidpreorder(BtreeNode*BT)//前序遍历
if(!
emptyBtree(BT)){
cout<
<
BT->
data<
"
"
;
//输出结点值
preorder(BT->
voidmidorder(BtreeNode*BT)//中序遍历
midorder(BT->
voidlaterorder(BtreeNode*BT)//后序遍历
laterorder(BT->
boolfindBtree(BtreeNode*BT,elemtypex)//查找二叉树中结点元素为x值的结点
if(emptyBtree(BT))//空树,返回false
returnfalse;
if(BT->
data==x)//找到,返回true
returntrue;
else{
if(findBtree(BT->
lchild,x))//左子叶递归查找
returntrue;
rchild,x))//右子叶递归查找
returnfalse;
}
voidlevelorder(BtreeNode*BT)//按层遍历二叉树
Queuequeue;
//用于存放二叉树结点的队列
initQueue(queue);
BtreeNode*P;
emptyBtree(BT))//二叉树不为空,根节点入队
insertQueue(queue,BT);
while(!
emptyQueue(queue)){//当队列不为空时,队首元素出队列
P=deleteQueue(queue);
P->
//输出出队元素值
if(P->
lchild!
=NULL)//当左右子叶不为空时,递归
insertQueue(queue,P->
rchild!
=NULL)
intGet_Sub_Depth(BtreeNode*BT,elemtypex)//求二叉树中以元素值为x的结点为根的子树的深度
intm,n;
emptyBtree(BT)){//二叉树非空
if(BT->
data==x)//找到,返回其深度
returndepthBtree(BT);
m=Get_Sub_Depth(BT->
lchild,x);
//左右子叶递归,返回深度
n=Get_Sub_Depth(BT->
rchild,x);
returnm>
nm:
n;
voidprintBtree(BtreeNode*BT,intn)//打印二叉树
inti;
if(emptyBtree(BT))//二叉树为空,返回
return;
printBtree(BT->
rchild,n+1);
//先递归输出右子树
for(i=0;
i<
i++)
//前导空格,表示层次
cout<
---"
data;
//结点的值
endl;
lchild,n+1);
//再递归输出右子树
voidPrintBtree(BtreeNode*BT)//二叉树的广义表打印
if(!
emptyBtree(BT->
lchild)||!
rchild)){
cout<
("
PrintBtree(BT->
if(!
rchild))
cout<
"
)"
#include<
>
typedefcharelemtype;
#include"
voidmain()
BtreeNode*Btree;
initBtree(Btree);
elemtypea,b;
请严格按照先序顺序输入二叉树中的数据,以“$”为每个结点的结束标志"
insertBtree(Btree);
二叉树的深度为:
depthBtree(Btree)<
先序遍历二叉树:
preorder(Btree);
中序遍历二叉树:
midorder(Btree);
后序遍历二叉树:
laterorder(Btree);
层序遍历二叉树:
levelorder(Btree);
请输入需查找字符:
cin>
a;
if(findBtree(Btree,a))
查找字符"
a<
成功!
查找失败,没有该字符!
请输入以元素值为x的结点为根的子树的深度的x的值:
b;
if(Get_Sub_Depth(Btree,b)==0)
未查询到该结点!
!
结点元素值为x的深度为:
Get_Sub_Depth(Btree,b)<
二叉树的广义表打印如下图:
PrintBtree(Btree);
二叉树打印如下图:
printBtree(Btree,depthBtree(Btree));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 基本 操作