数据结构:二叉树子系统
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()
{
if (t)//结点不为空
{
in Order(t->lchild);
printf("%3c", t->data); //显示
in Order(t->rchild);
}
} /*************************************************
Function: levelOrder()
fflush(stdi n);
scan f("%d",&choice);
switch(choice)
{
case 1:
printf("请输入根结点(’O'表示该结点为空):”);
t=createTree();
printf("二叉树建立成功。\n");
break;
case 2: showTree(t); break;
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) //左孩子非空{
Others: NULL
***********************************************
void preOrder(BT *t)//先序遍历
if (t)//结点不为空
{
printf("%3c", t->data); //显示preOrder(t->lchild); //递归调用preOrder(t->rchild);
Description:求二叉树叶子数
Calls: leafNum()
In put:t:结点指针
Return: int
Others: NULL
*************************************************/
int leafNum(BT *t)//叶子数
{
int i = 0;
Description:主调函数
Calls: createTree() showTree() preOrder() postOrder() in Order() leafNum() levelOrder() no deNum() treeDepth()
In put: NULL
Return: void
Function: in Order()
Description:中序遍历
Calls: in Order()
In put: t:结点指针
Return: void
Others: NULL
***********************************************
void inOrder(BT *t)//中序遍历
}
}
/*************************************************
Function: postOrder()
Description:后序遍历
Calls: postOrder()
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++)
q[j] = p->lchild;
j++;
}
if (p->rchild != NULL) //左孩子非空{
q[j] = p->rchild;
j++;
}
i++;//为了显示下一个结点
}
} /*************************************************
Function: leafNum()
if (t->lchild == NULL && t->rchild == NULL) //左右孩子都为空{
7—
--求叶子数
*\n");
prin tf("*
8——
--求结点数
*\n");
prin tf("*
9——
--求树深度
*\n");
prin tf("*
0——
--返回
*\n");
prin tf("*******************************\n")・
printf("请选择菜单号
(0--9):");
} return t;
}
/*************************************************
Function: showTree()
Description:凹入显示二叉树
Calls: void
In put: t:结点指针
Return: void
Others: NULL
void postOrder(BT *t)//后序遍历
{
if (t)//结点不为空
{
postOrder(t->lchild); postOrder(t->rchild); printf("%3c", t->data); //显示
}
}
***********************************************
/**题目:按屏幕提示用前序方法建立一棵二叉树,并能按凹入法显示二叉树结构。
*编写前序遍历、中序遍历、后序遍历、层次遍历程序。
*编写求二叉树的叶结点数、总结点数和深度的程序。
*设计一个选择式菜单,以菜单方式选择下列操作。
*
二叉树子系统
*
*******************************
*
Others: NULL
***********************************************
void mai n()
{
BT *t = NULL;
int choice, k = 1;
while (k)
{
prin tf("\n
二叉树子系统\n");
prin tf("*******************************\n")・
{
printf("0。\n");
}
else
{
printf("%d。\n", nodeNum(t)); } break;
case 9:
printf("该二叉树的深度为:"); if (t == NULL)