输入任意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编辑过]