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