C语言编程二叉树Word下载.docx

上传人:b****7 文档编号:22034160 上传时间:2023-02-02 格式:DOCX 页数:13 大小:102.09KB
下载 相关 举报
C语言编程二叉树Word下载.docx_第1页
第1页 / 共13页
C语言编程二叉树Word下载.docx_第2页
第2页 / 共13页
C语言编程二叉树Word下载.docx_第3页
第3页 / 共13页
C语言编程二叉树Word下载.docx_第4页
第4页 / 共13页
C语言编程二叉树Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言编程二叉树Word下载.docx

《C语言编程二叉树Word下载.docx》由会员分享,可在线阅读,更多相关《C语言编程二叉树Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

C语言编程二叉树Word下载.docx

3•递归-前序遍历二叉树

 

-|g|x|

1•递归■创建二叉樋表

5•非递归-中序握历二叉树

6•层次■遍历二叉树

10•交换二叉树的所有左右子树

6•邁出亲统

诘选择:

3递归•前序遍历二叉利:

ABCDEFG

1•递归■创建二叉植表

4•递归-后序遍历二叉树

03

-|p|x|

1•递归■创建二叉犍表

2•递归■中序遍历二叉树

酬翅二叉树

2d

6•启岀亲绕

诘选择:

7二叉科的咼度为:

4

•I口国

4•递归■后存遍历二叉树

5•非递归-中序遍历二叉树

B•层次-遍历二叉树

10・交换二叉树的所有左右子树

•追岀亲绕

谙选择:

8二叉材的结点数为:

7

-|n|x|

6•足岀亲绕

9二叉科中叶子结点数为:

3

1•递归■创逢二叉涟表

小结:

通过这次实验,我体会到深刻理解数据结构的重要性,只有真正理解定义数据类型的好处才能用好这样一种数据结构。

在一开始定义数据结构时,不够细心,总有问题出现,如数据域与指针域的定义类型的不同,在输好了结构体之后,我开始一个个编写本实验要求实现功能的子函数。

以前总觉得使用递归算法是非常难的事情,很复杂很乱,经常会理解不了而导致编程出错,但这次的实验中二叉树的中序、先序、后序遍历都使用了递归算法,而且用起来并不复杂,这使我更进一步地学习和理解了函数的递归调

用并得到灵活的运用

还有,再次发现自己对指针的认识还很肤浅,也常常使所设计的程序无法实现需求功能,所以最后我选择了栈的链式存储结构来实现。

通过本实验调试过程中出现的一些问题,我对二叉树的结构有了较为深入的理解,相信以后在更多的尝试之中,自己会不断进步。

#includevstdio.h>

#include<

malloc.h>

#defineMAXSIZE100

typedefcharDataType;

typedefstructBiTNode/*二叉链表存储结构*/

{DataTypedata;

structBiTNode*lchild,*rchild;

}BiTree;

typedefBiTree*ElemType;

/*栈中数据元素类型,栈中保存结点指针*/

typedefstruct

{ElemTypedata[MAXSIZE];

inttop;

}SeqStack;

/*栈的类型定义,顺序栈*/

{ElemTypequeue[MAXSIZE];

intfront,rear;

}SP;

SeqStack*initSeqStack()/*初始化栈*/

{SeqStack*s;

/*首先建立栈空间,然后初始化栈顶指针*/

s=(SeqStack*)malloc(sizeof(SeqStack));

s->

top=-1;

returns;

}

intpush(SeqStack*s,ElemTypex)

{if(s->

top==MAXSIZE-1){/*栈满不能入栈*/printf("

栈满"

);

return0;

top++;

data[s->

top]=x;

return1;

voidpop(SeqStack*s)/*出栈,假设栈不空*/

{s->

top--;

}

intempty(SeqStack*s)

top==-1)return1;

elsereturn0;

ElemTypetop(SeqStack*s)/*设栈不空*/

{return(s->

top]);

/*递归算法创建二叉链表*/

BiTree*createBiTree()

{DataTypech;

BiTree*T;

ch=getchar();

if(ch=='

0'

)returnNULL;

else{T=(BiTree*)malloc(sizeof(BiTree));

T->

data=ch;

lchild=createBiTree();

rchild=createBiTree();

returnT;

/*中序遍历二叉树的递归算法*/

voidInOrder(BiTree*T)

{if(T)

{InOrder(T->

lchild);

printf("

%c"

T->

data);

InOrder(T->

rchild);

/*前序遍历二叉树的递归算法*/

voidPreOrder(BiTree*T)

{printf("

PreOrder(T->

/*后序遍历二叉树的递归算法*/

voidPostOrder(BiTree*T)

{PostOrder(T->

PostOrder(T->

printf("

/*中序遍历二叉树的非递归算法*/

voidInOrderFei(BiTree*p)

s=initSeqStack();

while

(1)

{while(p){push(s,p);

p=p->

lchild;

}/*先将结点指针压栈,待出栈时再访问*/if(empty(s))break;

p=top(s);

pop(s);

p->

rchild;

/*按层次遍历*/

voidLevelOrder(BiTree*T)

{SP*p;

p=(SP*)malloc(sizeof(SP));

p->

front=0;

p->

rear=0;

if(T!

=NULL){p->

queue[p->

front]=T;

front=p->

front+1;

}while(p->

front!

=p->

rear){T=p->

rear];

rear=p->

rear+1;

if(T->

lchild!

front]=T->

/*左孩子进队列*/p->

rchild!

/*右孩子进队列*/p->

}}

}/*求二叉树的高度*/intheight(BiTree*T)

{inti,j;

if(!

T)return0;

i=height(T->

/*求左子树的高度*/j=height(T->

/*求右子树的高度*/

returni>

j?

i+1:

j+1;

/*二叉树的高度为左右子树中较高的高度加1*/

/*求二叉树的所有结点个数*/

intNodes(BiTree*T)

{intn1,n2;

if(T==NULL)return0;

elseif(T->

lchild==NULL&

&

rchild==NULL)return1;

else{n1=Nodes(T->

n2=Nodes(T->

returnn1+n2+1;

/*求二叉树的叶子结点个数*/

intleafs(BiTree*T)

{intnum1,num2;

else{if(T->

num1=leafs(T->

/*求左子树中叶子结点数*/num2=leafs(T->

/*求右子树中叶子结点数*/returnnum1+num2;

/*交换二叉树的所有左右子树*/

voidexchange(BiTree*T)

{BiTree*temp=NULL;

rchild==NULL)return;

else{temp=T->

lchild=T->

rchild=temp;

lchild)exchange(T->

rchild)exchange(T->

/*交换后二叉树的遍历*/

voidDisplay(BiTree*T)

{printf("

\t交换后二叉树按中序遍历输出:

"

InOrder(T);

\n"

\t交换后二叉树按前序遍历输出:

PreOrder(T);

\t交换后二叉树按后序遍历输出:

PostOrder(T);

voidmenu()

\t\t1.递归刨建二叉链表\n"

\t\t2.递归-中序遍历二叉树\n"

\t\t3.递归-前序遍历二叉树\n"

\t\t4.递归-后序遍历二叉树\n"

\t\t5.非递归-中序遍历二叉树\n"

\t\t6.层次-遍历二叉树\n"

\t\t7.二叉树的高度\n"

\t\t8.二叉树的结点个数\n"

\t\t9.二叉树的叶子结点个数\n"

\t\t10.交换二叉树的所有左右子树\n"

\t\t0.退出系统\n"

\n\t请选择:

voidmain()

{BiTree*bt;

bt=NULL;

intn,m=1;

while(m){

menu();

scanf("

%d"

&

n);

getchar();

switch(n){

case1:

\n\t请输入结点的前序序列创建二叉树:

0表示空:

bt=createBiTree();

break;

}/*生成二叉树*/

case2:

\n\t递归-中序遍历二叉树:

InOrder(bt);

case3:

\n\t递归-前序遍历二叉树:

PreOrder(bt);

}case4:

\n\t递归-后序遍历二叉树:

PostOrder(bt);

}case5:

\n\t非递归-中序遍历二叉树"

InOrderFei(bt);

}case6:

\n\t按层次遍历二叉树:

LevelOrder(bt);

}case7:

\n\t二叉树的高度为:

%d\n"

height(bt));

}case8:

\n\t二叉树的结点数为:

Nodes(bt));

}case9:

\n\t二叉树中叶子结点数为:

leafs(bt));

\n\n"

case10:

\n\t交换二叉树的所有左右子树exchange(bt);

Display(bt);

case0:

m=0;

}}

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

当前位置:首页 > 人文社科 > 法律资料

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

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