二叉排序树的建立与遍历

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct node
 4 {
 5     int data;
 6     struct node *left, *right;
 7 };
 8 
 9 void build(struct node **p, int k) //指向指针的指针。。
10 {
11     if(*p == NULL)
12     {
13         *p = (struct node *)malloc(sizeof(struct node));
14         (*p)->data = k;
15         (*p)->left = (*p)->right = NULL;
16     }
17     else if((*p)->data > k)
18         build(&(*p)->left, k);
19     else build(&(*p)->right, k);
20 }
21 
22 void inorder(struct node *p)
23 {
24     if(p == NULL)return;
25     inorder(p->left);
26     printf("%d", p->data);
27     inorder(p->right);
28 }
29 
30 void del(struct node *p) //释放内存
31 {
32     if(p == NULL)return;
33     del(p->left);
34     del(p->right);
35     free(p);
36 }
37 
38 int main()
39 {
40     int n, x;
41     scanf("%d", &n);
42     struct node *root = NULL;
43     while(n--)
44     {
45         scanf("%d", &x);
46         build(&root, x);
47     }
48     inorder(root);
49     del(root);
50     return 0;
51 }

第一次写博客好紧张啊。。。

这个传说中的二叉排序树写了好多遍才写对,一开始build函数传递的不是指向指针的指针,导致不输出,纠结了好久,睡了一下午来了灵感,幸福总是来的这么突然。

posted @ 2013-04-02 20:21  Anti-Magic  阅读(267)  评论(0编辑  收藏  举报