数据结构:二叉树子系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
q[j] = p->lchild;
j++;
}
if (p->rchild != NULL) //左孩子非空{
q[j] = p->rchild;
j++;
}
i++;//为了显示下一个结点
}
} /*************************************************
Function: leafNum()
} return t;
}
/*************************************************
Function: showTree()
Description:凹入显示二叉树
Calls: void
In put: t:结点指针
Return: void
Others: NULL
}
if (p->rchild != NULL)
{
tp++;
sta[tp] = p->rchild;
lev[tp][0] = n+wid;
lev[tp][1] = 2;
***********************************************
Function: preOrder() Description:先序遍历Calls: preOrder() In put: t:结点指针Return: void
if (x ==
:'0')//输入的值为零,结点为空
{
t:
=NULL;
}
else
{
t = (BT *)malloc(sizeof(BT));
t->data = x; //赋值
printf("请输入结点%c的左孩子:", t->data); t->lchild = createTree(); //递归建立左孩子printf("请输入结点%c的右孩子:", t->data); t->rchild=createTree();//递归调用
if (t != NULL)//结点非空
{
printf(”凹入表示法:\n");
tp= 1;
sta[tp] = t; //将各个结点的指针放在指针数组中lev[tp][O]=wid;//显示的前面的空白长度while (tp> 0)
{
p=sta[tp];
n = lev[tp][O];
//显示
for (i = 0; i< n; i++)
prin tf("*
1——
--建二叉树
*\n");
prin tf("*
2——
--凹入显示
*\n");
prin tf("*
3——
--先序遍历
*\n");
prin tf("*
4—
--中序遍历
*\n");
prin tf("*
5——
--后序遍历
*\n");
prin tf("*
6——
--层次遍历
*\n");
prin tf("*
Others: NULL
***********************************************
void preOrder(BT *t)//先序遍历
if (t)//结点不为空
{
printf("%3c", t->data); //显示preOrder(t->lchild); //递归调用preOrder(t->rchild);
{
levelOrder(t);
} break;
case7:
printf("该二叉树的叶子数:"); if (t == NULL)
{
printf("0。\n");
}
else
{
printf("%d。\n", leafNum(t));
} break;
case 8:
printf("该二叉树的结点数为:"); if (t == NULL)
if (t->lchild == NULL && t->rchild == NULL) //左右孩子都为空{
case 3:
printf(”先序遍历序列:"); if (t == NULL)
{
printf("空。\n”);
}
else
{
preOrder(t);
} break;
case 4:
printf("中序遍历序列:"); if (t == NULL)
{
printf("空。\n”);
}
else
{
in Order(t);
In put: NULL
Return: BT *
Others: NULL
*************************************************/
BT *createTree()//建立二叉树
{
BT *t;
char x;
getchar();
scan f("%c", &x);//获取输入的结点值
/**题目:按屏幕提示用前序方法建立一棵二叉树,并能按凹入法显示二叉树结构。
*编写前序遍历、中序遍历、后序遍历、层次遍历程序。
*编写求二叉树的叶结点数、总结点数和深度的程序。
*设计一个选择式菜单,以菜单方式选择下列操作。
*
二叉树子系统
*
*******************************
*
} break;
case 5:
printf("后序遍历序列:"); if (t == NULL)
{
printf("空。\n”);
}
else
{
postOrder(t);
} break;
case 6:
printf("层次遍历序列:"); if (t == NULL)
{
printf("空。\n");
} else
{
printf("0。\n");
}
else
{
printf("%d。\n", nodeNum(t)); } break;
case 9:
printf("该二叉树的深度为:"); if (t == NULL)
{
printf("0。\n");
}
else
{
printf("%d。\n", treeDepth(t)); } break;
Others: NULL
***********************************************
void mai n()
{
BT *t = NULL;
int choice, k = 1;
while (k)
{
prin tf("\n
二叉树子系统\n");
prin tf("*******************************\n")・
fflush(stdi n);
scan f("%d",&choice);
switch(choice)
{
case 1:
printf("请输入根结点(’O'表示该结点为空):”);
t=createTree();
printf("二叉树建立成功。\n");
break;
case 2: showTree(t); break;
{
printf("");
}
printf("%c", p->data);
for (i = n+1; i < 30; i+=2) {
printf("■");
}
prin tf("\n");
tp--;
//记录左右孩子
if (p->lchild != NULL)
{
tp++;
sta[tp] = p->lchild; lev[tp][0] = n+wid; lev[tp][1] = 1;
Function: in Order()
Description:中序遍历
Calls: in Order()
In put: t:结点指针
Return: void
Others: NULL
***********************************************
void inOrder(BT *t)//中序遍历
*
1
建二叉树
*
*
*
2
凹入显示
*
*
*
3
先序遍历
*
*
*
4
中序遍历
*
*
*
5
后序遍历
*
*
*
6
层次遍历
*
*
*
7
求叶子数
*
*
*
8
求结点数
*
*
*
9
求树深度
*
*
*
0
返 回
*
*
*******************************
*
请选择菜单
号(0--9)
*/
#include <stdio.h>
#include <stdlib.h>
{
if (t)//结点不为空
{
in Order(t->lchild);
printf("%3c", t->data); //显示
in Order(t->rchild);
}
} /*************************************************
Function: levelOrder()
}
}
/*************************************************
Function: postOrder()
Description:后序遍历
Calls: postOrder()
In put:t:结点指针
Return: void
Others: NULL
*************************************************/
Description:主调函数
Calls: createTree() showTree() preOrder() postOrder() in Order() leafNum() levelOrder() no deNum() treeDepth()
In put: NULL
Return: void
typedef struct bTree//二叉树结点{
char data;//值域
struct bTree *lchild;//左孩子
struct bTree *rchild;//右孩子
}BT;
BT *createTree();
void showTree(BT *t);
void preOrder(BT *t);
case 0:
k = 0; break;
default:
k = 1;
break;
}
}
/*************************************************
Function: createTree()
Description:建立二叉树
Calls: createTree()
Description:层次遍历
Calls: void
In put: t:结点指针
Return: void
Others: NULL
*************************************************/
void levelOrder(BT *t)//层次遍历
{
int i, j;
BT *q[100]; //指针数组
BT *p;
p = t;
if (p != NULL) //结点非空
{
i = 1;
q[i] = p;
j = 2;
}
while (i != j) //先将每个结点的指针存入指针数组中,在显示出来{
p=q[i];
prin tf("%3c", p->data);
if (p->lchild != NULL) //左孩子非空{
7—
--求叶子数
*\n");
prin tf("*
8——
--求结点数
*\n");
prin tf("*
9——
--求树深度
*\n");
prin tf("*
0——
--返回
*\n");
prin tf("*******************************\n")・
printf("请选择菜单号
(0--9):");
void postOrder(BT *t);
void inOrder(BT *t);
void levelOrder(BT *t);
int leafNum(BT *t);
int nodeNum(BT *t);
int treeDepth(BT *t);
/*************************************************Function: main()
void postOrder(BT *t)//后序遍历
{
if (t)//结点不为空
{
postOrder(t->lchild); postOrder(t->rchild); printf("%3c", t->data); //显示
}
}
*************Baidu Nhomakorabea*********************************
*************************************************/
void showTree(BT *t)//显示二叉树
BT *sta[100], *p;
int lev[100][2]; //第一个空存要空的长度,第二空存左右孩子的标示
int tp, n, i, wid = 4;
Description:求二叉树叶子数
Calls: leafNum()
In put:t:结点指针
Return: int
Others: NULL
*************************************************/
int leafNum(BT *t)//叶子数
{
int i = 0;
相关文档
最新文档