大数据结构二叉树基本操作源代码Word文档下载推荐.docx
- 文档编号:17458889
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:27
- 大小:21.68KB
大数据结构二叉树基本操作源代码Word文档下载推荐.docx
《大数据结构二叉树基本操作源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大数据结构二叉树基本操作源代码Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
//判断二叉树是否为空
intBiTreeDepth();
//计算二叉树的深度
boolRootValue(T&
e);
//若二叉树不为空用e返回根结点的值,函数返回true,否则函数返回false
BTNode<
*GetRoot();
//二叉树不为空获取根结点指针,否则返回NULL
boolAssign(Te,Tvalue);
//找到二叉树中值为e的结点,并将其值修改为value。
TGetParent(Te);
//若二叉树不空且e是二叉树中的一个结点那么返回其双亲结点值
TGetLeftChild(Te);
//获取左孩子结点值
TGetRightChild(Te);
//获取右孩子结点值
TGetLeftSibling(Te);
//获取左兄弟的结点值
Trightsibling(BTNode<
*p,Te);
TGetRightSibling(Te);
//获取右孩子的结点值
boolInsertChild(BTNode<
*p,BTNode<
*c,intRL);
//插入操作
boolDeleteChild(BTNode<
*p,intRL);
//删除操作
voidPreTraBiTree();
//递归算法:
先序遍历二叉树
voidInTraBiTree();
//递归算法:
中序遍历二叉树
voidPostTraBiTree();
后序遍历二叉树
voidPreTraBiTree_N();
//非递归算法:
voidInTraBiTree_N();
voidLevelTraBiTree();
//利用队列层次遍历二叉树
intLeafCount();
//计算叶子结点的个数
*SearchNode(Te);
//寻找到结点值为e的结点,返回指向结点的指针
voidDisplayBTreeShape(BTNode<
*bt,intlevel=1);
//二叉树的树形显示算法
voidBinaryTree<
:
DisplayBTreeShape(BTNode<
*bt,intlevel)
if(bt)//空二叉树不显示
{DisplayBTreeShape(bt->
rchild,level+1);
//显示右子树
cout<
<
endl;
//显示新行
for(inti=0;
i<
level-1;
i++)
"
"
;
//确保在第level列显示节点
bt->
data;
//显示节点
DisplayBTreeShape(bt->
lchild,level+1);
//显示左子树
}//if
}//DisplayBTree
staticintclear(BTNode<
*bt)
{//销毁一棵二叉树
if(bt)//根结点不空
{
clear(bt->
lchild);
//递归调用Clear()函数销毁左子树
rchild);
//递归调用Clear()函数销毁右子树
cout<
释放了指针"
bt<
所指向的空间。
deletebt;
//释放当前访问的根结点
}
return0;
}
CreateBiTree(Tend)
{//创建一棵二叉树:
先序序列的顺序输入数据,end为结束的标志
请按先序序列的顺序输入二叉树,-1为空指针域标志:
*p;
Tx;
cin>
>
x;
//输入根结点的数据
if(x==end)return;
//end表示指针为空,说明树为空
p=newBTNode<
//申请内存
if(!
p)
{
申请内存失败!
exit(-1);
//申请内存失败退出
p->
data=x;
lchild=NULL;
rchild=NULL;
BT=p;
//根结点
create(p,1,end);
//创建根结点左子树,1为标志,表示左子树
create(p,2,end);
//创建根结点右子树,2为标志,表示右子树
staticintcreate(BTNode<
*p,intk,Tend)
{//静态函数,创建二叉树,k为创建左子树还是右子树的标志,end为空指针域的标志
*q;
if(x!
=end)
{//先序顺序输入数据
q=newBTNode<
q->
if(k==1)p->
lchild=q;
//q为左子树
if(k==2)p->
rchild=q;
//p为右子树
create(q,1,end);
//递归创建左子树
create(q,2,end);
//递归创建右子树
boolBinaryTree<
IsEmpty()
{//判断二叉树是否为空
if(BT==NULL)returntrue;
//树根结点为空,说明树为空
returnfalse;
intBinaryTree<
BiTreeDepth()
{//利用递归算法计算树的深度
*bt=BT;
//树根结点
intdepth=0;
//开始的时候数的深度初始化为0
if(bt)//如果树不为空
Depth(bt,1,depth);
returndepth;
staticintDepth(BTNode<
*p,intlevel,int&
depth)
{//这个函数由BiTreeDepth()函数调用完成树的深度的计算
//其中p是根结点,Level是层,depth用来返回树的深度
if(level>
depth)depth=level;
if(p->
lchild)Depth(p->
lchild,level+1,depth);
//递归的遍历左子树,并且层数加1
rchild)Depth(p->
rchild,level+1,depth);
//递归的遍历右子树,并且层数加1
RootValue(T&
e)
{//若二叉树不为空用e返回根结点的值,函数返回true,否则函数返回false
if(BT!
=NULL)//判断二叉树是否为空
e=BT->
//若不空,则将根结点的数据赋值给e
returntrue;
//操作成功,返回true
//二叉树为空,返回false
BTNode<
*BinaryTree<
GetRoot()
{//获取根信息
returnBT;
//返回根结点的指针,若二叉树为空那么返回NULL
Assign(Te,Tvalue)
{//结点赋值
if(SearchNode(e)!
=NULL)
(SearchNode(e))->
data=value;
TBinaryTree<
GetParent(Te)
{//获取双亲信息
*Queue[200],*p;
intrear,front;
rear=front=0;
if(BT)
Queue[rear++]=BT;
while(rear!
=front)
{
p=Queue[front++];
if(p->
lchild&
&
p->
lchild->
data==e||p->
rchild&
rchild->
data==e)
returnp->
else
{
if(p->
lchild)Queue[rear++]=p->
lchild;
rchild)Queue[rear++]=p->
rchild;
}
}
returnNULL;
GetRightChild(Te)
{//如果二叉树存在,e是二叉树中的一个结点,右子树存在那么返回右子树的结点值,否则返回0并提示右子树为空
*p=SearchNode(e);
rchild)returnp->
//右子树不空,返回右子树根结点的值
结点"
e<
的右子树为空"
GetLeftChild(Te)
{//如果二叉树存在,e是二叉树中的一个结点,左子树存在那么返回左子树的结点值,否则返回0并提示左子树为空
lchild)returnp->
的左子树为空"
GetLeftSibling(Te)
{//获取左兄弟信息
returnleftsibling(BT,e);
else
{//二叉树为空
二叉树为空!
return0;
Tleftsibling(BTNode<
*p,Te)
Tq=0;
if(p==NULL)return0;
if(p->
rchild)
else
returnNULL;
q=leftsibling(p->
lchild,e);
if(q)returnq;
rchild,e);
GetRightSibling(Te)
{//获取右兄弟信息
returnrightsibling(BT,e);
TBinaryTree<
rightsibling(BTNode<
*q=SearchNode(e);
*pp;
if(q)
pp=SearchNode(GetParent(e));
if(pp)
if(pp->
rchild)returnpp->
elsereturn0;
elsereturn0;
InsertChild(BTNode<
*c,intLR)
{//插入孩子
if(p)
if(LR==0)
c->
rchild=p->
p->
lchild=c;
else
rchild=c;
//p为空
DeleteChild(BTNode<
*p,intRL)
{//删除结点
if(RL==0)
clear(p->
//释放p右子树的所有结点空间
//删除成功
PreTraBiTree()
{//先序遍历二叉树
----------------------------------------------"
先序遍历二叉树:
p=BT;
PreTraverse(p);
//从根结点开始先序遍历二叉树
staticintPreTraverse(BTNode<
*p)
if(p!
data<
'
'
//输出结点上的数据
PreTraverse(p->
//递归的调用前序遍历左子树
//递归的调用前序遍历右子树
}
InTraBiTree()
{//中序遍历二叉树
中序遍历二叉树:
//根结点
InTraverse(p);
//从根结点开始中序遍历二叉树
staticintInTraverse(BTNode<
InTraverse(p->
//递归的调用中序遍历左子树
//递归的调用中序遍历右子树
PostTraBiTree()
{//后序遍历二叉树
后序遍历二叉树:
PostTraverse(p);
//从根结点开始遍历二叉树
staticintPostTraverse(BTNode<
PostTraverse(p->
//递归调用后序遍历左子树
//递归调用后序遍历右子树
PreTraBiTree_N()
{//
先序(非递归)遍历二叉树得:
*Stack[200];
//利用指针数组作为栈
inttop=0;
*p=BT;
//将根结点的指针赋值给p
while(p!
=NULL||top!
=0)
while(p!
cout<
Stack[top++]=p->
p=p->
if(top!
p=Stack[--top];
\n----------------------------------------------"
InTraBiTree_N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 二叉 基本 操作 源代码