输入任意10个数字,按照左子树一定比右子树小的规则构建二叉树。 同时,任意输入这10个数字中的任意一个数字,将遍历查找的数字顺序输出到屏幕上。*/
输入任意10个数字,按照左子树一定比右子树小的规则构建二叉树。同时,任意输入这10个数字中的任意一个数字,将遍历查找的数字顺序输出到屏幕上。*/
程序代码:#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof (Tree)
typedef struct Tree
{
int n;
struct Tree* left;
struct Tree* right;
}Tree,*PTree;
void Init(int** a,int* n); //初始化信息
void InsertTree(PTree* p,int n); //创建二叉搜索树
void NewNode(PTree* p,int n); //插入一个新的节点
void In_Order_Traversal(PTree p); //中序遍历节点
PTree Find_Node(PTree p,int n); // 查找结点
void DestroyTree(PTree p); //释放节点
int main()
{
PTree t=NULL;
PTree t_find=NULL;
int *a=NULL;
int n=0;
int e=0;
int i=0;
Init(&a,&n);
for (i=0;i<n;++i)
InsertTree(&t,a[i]);
puts("二叉搜索树中序遍历打印的结果为:");
In_Order_Traversal(t);
puts("");
printf("请输入要查找的数据:");
scanf("%d",&e);
if ((t_find=Find_Node(t,e))!=NULL)
puts("\n找到该数据");
else
puts("\n找不到该数据!");
DestroyTree(t);
return 0;
}
void Init(int** a,int* n)
{
int i=0;
printf("请输入数据个数:");
scanf("%d",n);
if ((*a=(int*)malloc(*n*sizeof(int)))==NULL)
{
puts("分配空间失败!");
exit(0);
}
printf("请输入%d个数据:\n",*n);
for (i=0;i<*n;++i)
scanf("%d",*a+i);
printf("请输入");
}
void InsertTree(PTree* p,int n) //创建二叉搜索树
{
if (*p==NULL)
{
NewNode(p,n);
return ;
}
if (n<(*p)->n)
InsertTree(&((*p)->left),n);
else if (n>(*p)->n)
InsertTree(&(*p)->right,n);
}
void NewNode(PTree* p,int n) //插入一个新的节点
{
*p=(PTree)malloc(LEN);
if (*p!=NULL)
{
(*p)->n=n;
(*p)->left=NULL;
(*p)->right=NULL;
}
}
void In_Order_Traversal(PTree p) //中序遍历节点
{
if (p==NULL)
return ;
In_Order_Traversal(p->left);
printf("%d ",p->n);
In_Order_Traversal(p->right);
}
PTree Find_Node(PTree p,int n)
{
if (p==NULL)
return p;
if (n<p->n)
{
printf("%d ",p->n);
p=Find_Node(p->left,n);
}
else if (n>p->n)
{
printf("%d ",p->n);
p=Find_Node(p->right,n);
}
else
printf("%d ",p->n);
return p;
}
void DestroyTree(PTree p)
{
if (p==NULL)
return ;
DestroyTree(p->left);
DestroyTree(p->right);
free(p);
p=NULL;
}
[此贴子已经被作者于2017-3-20 22:14编辑过]
