C语言编程二叉树Word格式.docx
- 文档编号:16362654
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:14
- 大小:376.66KB
C语言编程二叉树Word格式.docx
《C语言编程二叉树Word格式.docx》由会员分享,可在线阅读,更多相关《C语言编程二叉树Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
#include<
stdio.h>
malloc.h>
#defineMAXSIZE100
typedefcharDataType;
typedefstructBiTNode/*二叉链表存储结构*/
{DataTypedata;
structBiTNode*lchild,*rchild;
}BiTree;
typedefBiTree*ElemType;
/*栈中数据元素类型,栈中保存结点指针*/
typedefstruct
{ElemTypedata[MAXSIZE];
inttop;
}SeqStack;
/*栈的类型定义,顺序栈*/
typedefstruct
{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)
{if(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);
%c"
T->
data);
InOrder(T->
rchild);
/*前序遍历二叉树的递归算法*/
voidPreOrder(BiTree*T)
{printf("
PreOrder(T->
/*后序遍历二叉树的递归算法*/
voidPostOrder(BiTree*T)
{PostOrder(T->
PostOrder(T->
/*中序遍历二叉树的非递归算法*/
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;
rear=0;
if(T!
=NULL){
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->
/*左孩子进队列*/
rchild!
/*右孩子进队列*/
}}
/*求二叉树的高度*/
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&
&
T->
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);
printf("
\n"
\t交换后二叉树按前序遍历输出:
PreOrder(T);
\t交换后二叉树按后序遍历输出:
PostOrder(T);
voidmenu()
{printf("
\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));
case10:
\n\t交换二叉树的所有左右子树"
\n\n"
exchange(bt);
Display(bt);
case0:
m=0;
}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 二叉