二叉排序树

  二叉排序树与快排的思想差不多,只不过这里用到了二叉树的数据结构。对于这个二叉树满足,每个节点都满足左子树每个值都比它小,右子树每个值都比它大。这样,中序遍历这个树就可以得到升序结果。

  这里可以看出,关键问题是,怎么把一个结点插入到他应该在的位置,实现二叉排序树的构建过程。用到的是一个递归操作。代码如下:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 #define newp (tree*)malloc(sizeof(tree))  //申请地址的宏定义 
 5 
 6 typedef struct _tree{
 7     int data;
 8     struct _tree *l,*r;    //树结点类型 
 9 }tree;
10 
11 void insert(tree ** newroot,tree* s)   //插入一个结点的函数 
12 {
13     if (*newroot==NULL) (*newroot)=s;
14     else{
15         if ((*newroot)->data<(s->data)) insert(&((*newroot)->r),s);
16         if ((*newroot)->data>(s->data)) insert(&((*newroot)->l),s);
17     }
18 }
19 
20 void inorder(tree * newroot)  //中序遍历 
21 {
22     if (newroot!=NULL)
23     {
24         inorder(newroot->l);
25         printf("%d ",newroot->data);
26         inorder(newroot->r);
27     }
28 }
29 
30 int main()
31 {
32     int n,i,x;
33     tree * root=NULL,*s;
34     scanf("%d",&n);
35     for (i=0;i<n;i++)
36     {
37         scanf("%d",&x);
38         s=newp;
39         s->data=x;
40         s->l=NULL;
41         s->r=NULL;
42         insert(&root,s);
43     } 
44     inorder(root);
45     return 0;
46 }

 

posted @ 2015-08-22 13:45  lvmememe  阅读(261)  评论(0编辑  收藏  举报