大数据结构二叉树基本操作源代码Word文档下载推荐.docx

上传人:b****5 文档编号:17458889 上传时间:2022-12-01 格式:DOCX 页数:27 大小:21.68KB
下载 相关 举报
大数据结构二叉树基本操作源代码Word文档下载推荐.docx_第1页
第1页 / 共27页
大数据结构二叉树基本操作源代码Word文档下载推荐.docx_第2页
第2页 / 共27页
大数据结构二叉树基本操作源代码Word文档下载推荐.docx_第3页
第3页 / 共27页
大数据结构二叉树基本操作源代码Word文档下载推荐.docx_第4页
第4页 / 共27页
大数据结构二叉树基本操作源代码Word文档下载推荐.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

大数据结构二叉树基本操作源代码Word文档下载推荐.docx

《大数据结构二叉树基本操作源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大数据结构二叉树基本操作源代码Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。

大数据结构二叉树基本操作源代码Word文档下载推荐.docx

//判断二叉树是否为空

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1