数据结构二叉树子系统Word文件下载.docx
《数据结构二叉树子系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构二叉树子系统Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
#include<
>
typedefstructbTree//二叉树结点
{
chardata;
//值域
structbTree*lchild;
//左孩子
structbTree*rchild;
//右孩子
}BT;
BT*createTree();
voidshowTree(BT*t);
voidpreOrder(BT*t);
voidpostOrder(BT*t);
voidinOrder(BT*t);
voidlevelOrder(BT*t);
intleafNum(BT*t);
intnodeNum(BT*t);
inttreeDepth(BT*t);
/*************************************************
Function:
main()
Description:
主调函数
Calls:
createTree()
showTree()
preOrder()
postOrder()
inOrder()
leafNum()
levelOrder()
nodeNum()
treeDepth()
Input:
NULL
Return:
void
Others:
*************************************************/
voidmain()
BT*t=NULL;
intchoice,k=1;
while(k)
{
printf("
\n二叉树子系统\n"
);
*******************************\n"
*1------建二叉树*\n"
*2------凹入显示*\n"
*3------先序遍历*\n"
*4------中序遍历*\n"
*5------后序遍历*\n"
*6------层次遍历*\n"
*7------求叶子数*\n"
*8------求结点数*\n"
*9------求树深度*\n"
*0------返回*\n"
请选择菜单号(0--9):
"
fflush(stdin);
scanf("
%d"
&
choice);
switch(choice)
case1:
请输入根结点('
0'
表示该结点为空):
t=createTree();
二叉树建立成功。
\n"
break;
case2:
showTree(t);
case3:
先序遍历序列:
if(t==NULL)
空。
}
else
preOrder(t);
case4:
中序遍历序列:
inOrder(t);
case5:
后序遍历序列:
postOrder(t);
case6:
层次遍历序列:
levelOrder(t);
case7:
该二叉树的叶子数:
0。
%d。
leafNum(t));
case8:
该二叉树的结点数为:
nodeNum(t));
case9:
该二叉树的深度为:
treeDepth(t));
case0:
k=0;
default:
k=1;
}
建立二叉树
BT*
BT*createTree()//建立二叉树
BT*t;
charx;
getchar();
%c"
x);
//获取输入的结点值
if(x=='
)//输入的值为零,结点为空
t=NULL;
t=(BT*)malloc(sizeof(BT));
t->
data=x;
//赋值
请输入结点%c的左孩子:
t->
data);
lchild=createTree();
//递归建立左孩子
请输入结点%c的右孩子:
rchild=createTree();
//递归调用
returnt;
凹入显示二叉树
t:
结点指针
voidshowTree(BT*t)//显示二叉树
BT*sta[100],*p;
intlev[100][2];
//第一个空存要空的长度,第二空存左右孩子的标示
inttp,n,i,wid=4;
if(t!
=NULL)//结点非空
凹入表示法:
tp=1;
sta[tp]=t;
//将各个结点的指针放在指针数组中
lev[tp][0]=wid;
//显示的前面的空白长度
while(tp>
0)
p=sta[tp];
n=lev[tp][0];
//显示
for(i=0;
i<
n;
i++)
"
p->
for(i=n+1;
i<
30;
i+=2)
▄"
tp--;
//记录左右孩子
if(p->
lchild!
=NULL)
tp++;
sta[tp]=p->
lchild;
lev[tp][0]=n+wid;
lev[tp][1]=1;
rchild!
rchild;
lev[tp][1]=2;
先序遍历
voidpreOrder(BT*t)//先序遍历
if(t)//结点不为空
%3c"
preOrder(t->
lchild);
rchild);
后序遍历
voidpostOrder(BT*t)//后序遍历
postOrder(t->
中序遍历
结点