二叉树的应用数据结构课程设计Word文档格式.docx

上传人:b****8 文档编号:22272015 上传时间:2023-02-03 格式:DOCX 页数:21 大小:161.32KB
下载 相关 举报
二叉树的应用数据结构课程设计Word文档格式.docx_第1页
第1页 / 共21页
二叉树的应用数据结构课程设计Word文档格式.docx_第2页
第2页 / 共21页
二叉树的应用数据结构课程设计Word文档格式.docx_第3页
第3页 / 共21页
二叉树的应用数据结构课程设计Word文档格式.docx_第4页
第4页 / 共21页
二叉树的应用数据结构课程设计Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

二叉树的应用数据结构课程设计Word文档格式.docx

《二叉树的应用数据结构课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《二叉树的应用数据结构课程设计Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

二叉树的应用数据结构课程设计Word文档格式.docx

3.非递归的先序遍历,中序遍历

4.二叉树的层次遍历

5.判断此二叉树是否是完全二叉树

6.二叉树的左右孩子的交换

7.通过递归对二叉树进行遍历。

二叉树的非递归遍历主要采用利用队进行遍历。

此后的判断此二叉树是否是完全二叉树也才采用队,而二叉树的左右孩子的交换则采用的是一个简单的递归。

#include<

iostream>

usingnamespacestd;

#defineMAXSIZE100

intsign=0;

voidmenu();

//

typedefstructBiTNode

{

chardata;

BiTNode*left_child,*right_child;

}BiTNode,*BiTree;

intCreateBiTree(BiTree&

T)//创建二叉树

{charch;

cout<

<

"

请输入数据(#为结束):

"

;

cin>

>

ch;

if(ch=='

#'

)T=NULL;

else

{

if(!

(T=newBiTNode)){

cout<

Overflow!

//noalloction

return0;

}

T->

data=ch;

CreateBiTree(T->

left_child);

//createleftchild

right_child);

//createrightchild

return1;

}

//判断此树是否是完全二叉树

intLevelOrder1(BiTree&

T)

{

BiTreestack[MAXSIZE];

BiTreep;

intfront,rear;

front=-1,rear=0;

stack[rear]=T;

while(rear!

=front)

{

front++;

p=stack[front];

if((p->

left_child==NULL)&

&

(p->

right_child))

sign=1;

if(p->

left_child)

{

rear++;

stack[rear]=p->

left_child;

}

right_child)

right_child;

}

voidOutput(BiTree&

T)//输出二叉树

T){

空树!

\n"

return;

}//空树

T->

data<

//输出根结点

if(T->

left_child)Output(T->

//输出左子树

right_child)Output(T->

//输出右子树

intDepth(BiTree&

T)//求树深

inti,j;

T)return0;

i=Depth(T->

j=Depth(T->

return(i>

j?

i:

j)+1;

intNode(BiTree&

T)//求结点数

return1+Node(T->

left_child)+Node(T->

intLeaf(BiTree&

T)//求叶子结点

left_child&

!

right_child)return1;

//仅有根结点

returnLeaf(T->

left_child)+Leaf(T->

//返回叶子结点的数目

voidPreOrder(BiTree&

T)//先序遍历算法DLR

T)return;

//递归调用的结束条件

//访问根结点的数据域

PreOrder(T->

//先序递归遍历T的左子树

//先序递归遍历T的右子树

voidInOrder(BiTree&

T)//中序遍历算法LDR

InOrder(T->

voidPostOrder(BiTree&

T)//后序遍历算法LRD

PostOrder(T->

//非递归先序遍历

intNRPreOrder(BiTree&

{BiTreestack[100],p;

inttop;

if(T==NULL)

return1;

top=-1;

p=T;

while(!

(p==NULL&

top==-1)){

while(p!

=NULL){

p->

if(top<

100-1)

top++;

stack[top]=p;

else{

栈溢出"

endl;

p=p->

if(top==-1)

else{

p=stack[top];

top--;

p=p->

//非递归中序遍历

intNRInOrder(BiTree&

cout<

//层次遍历

voidLevelOrder(BiTree&

{BiTreequeue[100];

intfront,rear;

return;

front=-1;

rear=0;

queue[rear]=T;

while(front!

=rear){

front++;

queue[front]->

if(queue[front]->

left_child!

rear++;

queue[rear]=queue[front]->

right_child!

=NULL)

//*******************************左右子树交换*****************************

/*将结点的左右子树交换*/

/*BiTNode*swap(BiTNode&

BiTNode*t,*t1,*t2;

if(T==NULL)t=NULL;

else

t=(BiTNode*)malloc(sizeof(BiTNode));

t->

data=T->

data;

t1=swap(T->

t2=swap(T->

left_child=t2;

right_child=t1;

return(t);

voidprint(BiTNode&

T)

if(T!

=NULL)

printf("

%c"

T->

data);

if(T->

=NULL||T->

{

printf("

("

);

print(b->

if(b->

=NULL)printf("

"

)"

}

}*/

intPreOrderTraverse(BiTreeT)

return0;

BiTreet;

if(T->

left_child||T->

right_child)

t=T->

T->

left_child=T->

right_child=t;

PreOrderTraverse(T->

}

//菜单

voidmenu()

{cout<

*****************************************************************************"

(主菜单)>

0.建立二叉树>

1.二叉树树深>

2.二叉树结点数>

3.二叉树的叶子结点>

4.二叉树的先序遍历>

5.二叉树的中序遍历>

6.二叉树的后序遍历>

7.二叉树的非递归先序遍历>

8.二叉树的非递归中序遍历>

9.二叉树的层次遍历>

10.判断此树是否是完全二叉树>

11.左右孩子交换>

12.退出>

//主函数

voidmain()

intbr,a;

BiTreeT;

br=CreateBiTree(T);

while

(1){

menu();

请输入选择的命令-->

cin>

a;

if(a>

=0||a<

=12)

switch(a){

case0:

{cout<

建立后的二叉树为:

Output(T);

system("

pause"

break;

case1:

该树的树深为:

Depth(T)<

case2:

该树的结点数:

Node(T)<

case3:

该树的叶子结点为:

Leaf(T)<

case4:

该树以先序遍历输出为:

PreOrder(T);

case5:

该树以中序遍历输出为:

InOrder(T);

case6:

该树以后序遍历输出为:

PostOrder(T);

case7:

该树的非递归先序遍历输出为:

NRPreOrder(T);

case8:

该树的非递归中序遍历输出为:

NRInOrder(T);

case9:

该树的层次遍历:

LevelOrder(T);

case10:

LevelOrder1(T);

if(sign==1)

{

cout<

这不是一个完全二叉树。

}

else

这是一个完全二叉树。

//break;

}

system("

case11:

PreOrderTraverse(T);

左右孩子已经替换成功"

case12:

exit(-1);

4运行结果:

4.1用二叉链表创建二叉树:

4.2主菜单

4.3求二叉树树深:

4.4二叉树结点数:

4.5二叉树的中序遍历:

4.6二叉树的层次遍历:

4.7左右孩子交换:

4.8左右孩子交换后的中序遍历:

4.9左右孩子交换后的层次遍历:

5.课程设计总结:

此次课程设计使我对书本的知识有进一步了解。

同时也是我知道自己的一些不足,这次课程设计我是在书本与同学的帮助下完成的。

它并不难,但是我没有自己独自完成是我的错误。

6参考书目:

1.《数据结构》课本

2.《数据结构基本操作》

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

当前位置:首页 > 解决方案 > 学习计划

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

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