#include <stdio.h>
#include <stdlib.h>
#define max 50
typedef struct liuyu
{
int data;
struct liuyu *lchild,*rchild;
}test;
liuyu *root,*p,*q[max];
int sum=0;
int m=sizeof(test);
int count = 0;
void insert_data(int x)
{
liuyu *p,*q,*s;
s=(test*)malloc(m);
s->data=x;
s->lchild=NULL;
s->rchild=NULL;
if(!root)
{
count++;
root=s;
}
p=root;
while(p)
{
q=p;
if(p->data==x)
{
return;
}
else if(x<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(x < q->data)
q->lchild=s;
else
q->rchild=s;
count++;
}
void MainUI()
{
printf(" 欢迎进入二叉树的操作界面\n");
printf("1. 数据输入\n");
printf("2. 树的遍历\n");
printf("3. 计算节点个数\n");
printf("4. 按值查找\n");
printf("5. 求树的深度\n");
printf("请选择:");
}
void pre(liuyu *T)
{
if(T)
{
printf("%d ",T->data);
pre(T->lchild);
pre(T->rchild);
}
}
void center(liuyu *T)
{
if(T)
{
center(T->lchild);
printf("%d ",T->data);
center(T->rchild);
}
}
void after(liuyu *T)
{
if(T)
{
after(T->lchild);
after(T->rchild);
printf("%d ",T->data);
}
}
void insert()
{
int i = 1, x;
root=NULL;
do
{
printf("please input data%d:",i);
i++;
scanf("%d",&x);
if(x==-9999){
printf("\n输入结束\n");
}
else
insert_data(x);
}
while(x!=-9999);
}
void ShowTraverseResult()
{
printf("先序遍历结果:");
pre(root);
printf("\n\n");
printf("中序遍历结果:");
center(root);
printf("\n\n");
printf("后序遍历结果:");
after(root);
printf("\n");
}
void ShowNodeDigit()
{
printf("\n节点个数为:%d\n",count);
}
void FindValue(liuyu *T, int data)
{
liuyu *p = T;
while(p)
{
if(p->data == data)
{
printf("查找到了\n");
return;
}
else if(p->data < data)
{
p = p->rchild;
}
else if(p->data > data)
{
p = p->lchild;
}
}
printf("没找到\n");
return;
}
int FindDeep(liuyu *T)
{
int deep = 0;
int lchilddeep, rchilddeep;
if(T)
{
lchilddeep = FindDeep(T->lchild);
rchilddeep = FindDeep(T->rchild);
if(lchilddeep > rchilddeep)
{
deep = lchilddeep+1;
}
else
{
deep = rchilddeep + 1;
}
}
return deep;
}
void main()
{
int i,x, mainchoose;
int data;
i=1;
root=NULL;
while(1)
{
system("cls");
MainUI();
scanf("%d",&mainchoose);
if(mainchoose == 1)
{
insert();
printf("按任意键返回\n");
fflush(stdin);
getchar();
}
else if(mainchoose == 2)
{
ShowTraverseResult();
printf("\n按任意键返回\n");
fflush(stdin);
getchar();
}
else if(mainchoose == 3)
{
ShowNodeDigit();
printf("\n按任意键返回\n");
fflush(stdin);
getchar();
}
else if(mainchoose == 4)
{
printf("请输入要查找的值:");
scanf("%d",&data);
FindValue(root, data);
printf("\n按任意键返回\n");
fflush(stdin);
getchar();
}
else if(mainchoose == 5)
{
printf("%d",FindDeep(root));
printf("\n按任意键返回\n");
fflush(stdin);
getchar();
}
}
}