#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LEN sizeof(struct
#define
#define
typedef int
//用二叉链表表示二叉树
struct
TElemType data;
TElemType num;
structBTNode *lchild;
structBTNode *rchild;
};
//返回结点数据函数
int Visit(int
" %d",*p);
returnOK;
}
//二叉树的层次顺序创建
int
{
inta[10];
inti;
BTNode *p,*q,*r,*s;
"请按图示给二叉树的结点赋值(输入个整数依次赋给二叉树的~10号结点\n");
for(i=0;i<10;i++)
"%d",&a[i]);
{T->num=1;T->data=a[0];
structBTNode*)malloc(LEN);T->lchild=p;p->num=2;p->data=a[1];
structBTNode*)malloc(LEN);T->rchild=q;q->num=3;q->data=a[2];q->lchild=NULL;
structBTNode*)malloc(LEN);p->lchild=r;r->num=4;r->data=a[3];r->rchild=NULL;
structBTNode*)malloc(LEN);p->rchild=s;s->num=5;s->data=a[4];s->rchild=NULL;
structBTNode*)malloc(LEN);q->rchild=p;q->num=6;p->data=a[5];
structBTNode*)malloc(LEN);r->lchild=q;q->num=7;q->data=a[6];q->lchild=q->rchild=NULL;
structBTNode*)malloc(LEN);s->lchild=q;q->num=8;q->data=a[7];q->lchild=q->rchild=NULL;
structBTNode*)malloc(LEN);p->lchild=q;q->num=9;q->data=a[8];q->lchild=q->rchild=NULL;
structBTNode*)malloc(LEN);p->rchild=q;q->num=10;q->data=a[9];q->lchild=q->rchild=NULL;}
" 您所建立的二叉树为: \n");
" %d \n",a[0]);
" | | \n");
" | | \n");
" %d %d \n",a[1],a[2]);
" | | | \n");
" | | | \n");
" %d %d %d \n",a[3],a[4],a[5]);
" | | | | \n");
" | | | | \n");
" %d %d %d %d \n",a[6],a[7],a[8],a[9]);
returnOK;
}
//二叉树的中序遍历输出
int
{
if(T)
{InOrderTraverse(T->lchild);
Visit(&T->data);
InOrderTraverse(T->rchild);
}
returnOK;
}
//二叉树的结点查找输出
int SeekTree(BTNode *T,int
{
BTNode *p=T;
if(p)
if(p->data==x)
"该数据所对应的结点编号为:\n%d\n",p->num);}
SeekTree(T->lchild,x);
SeekTree(T->rchild,x);}
returnOK;
}
//二叉树的结点个数计算
int
{
staticint
if(T)
{LeavesNum(T->lchild);
i++;
LeavesNum(T->rchild);
}
returni;
}
//主函数
void
{
BTNode *T;
structBTNode*)malloc(LEN);
intx;
intflag=1,select;
" 给定二叉树的结构图为: \n");
" 1 \n");
" | | \n");
" | | \n");
" 2 3 \n");
" | | | \n");
" | | | \n");
" 4 5 6 \n");
" | | | | \n");
" | | | | \n");
" 7 8 9 10 \n");
" \n");
"====================菜单======================\n");
"= 1.二叉树的层次顺序创建 =\n");
"= 2.二叉树的中序遍历输出 =\n");
"= 3.二叉树的结点查找输出 =\n");
"= 4.二叉树的结点个数计算 =\n");
"= 5.退出操作 =\n");
"================支持乱序选择==================\n");
while(flag){
"\n请选择菜单中的操作选项( 必须先选择“1”建立二叉树!建立之后再选择其他选项操作):\n");
"%d",&select);
switch(select)
{
case1:
break;
case2:
"按中序遍历输出的结果为:\n");
break;
case3:
"请输入要查找的数据:\n");
"%d",&x);
break;
case4:
"\n结点个数为:\n%d\n",LeavesNum(T));break;
case5:
break;
default:printf("您输入的数据有误!\n");
}
}
}