回 帖 发 新 帖 刷新版面

主题:二叉排序树的问题

此程序在插入结点时有问题,大家麻烦看看啊!
#include "stdio.h"
struct bitree
{int data;
 struct bitree *left;
 struct bitree *right;
};
void search (struct bitree *b,int x)
{if(b==NULL)
    printf("can not find this elem!\n");
 else
    {if(b->data==x) printf("this elem exists in this tree!\n");
     if(x<b->data)  search(b->left,x);
     else  search(b->right,x);
    }
}
void insert(struct bitree *b,struct bitree *s)
{if(b==NULL) b=s;
 else if(s->data<b->data) insert(b->left,s);
 else if(s->data>b->data||s->data==b->data)
 insert(b->right,s);
}
void create(struct bitree *b)
{int x,n,i;
 struct bitree *s;b=NULL;
 printf("please input the num of elem:\n");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {scanf("%d",&x);
 s=(struct bitree *)malloc(sizeof(struct bitree));
 s->data=x;s->left=NULL;s->right=NULL;
 insert(b,s);}
}
void postorder (struct bitree *b)
{if(!b) return;
 else
     {postorder(b->left);
      postorder(b->right);
      printf("%2d",b->data);
     }
}
main()
{struct bitree *b;
 b=(struct bitree *)malloc(sizeof(struct bitree));
 create(b);
 postorder(b);
 search(b,10);
}

回复列表 (共2个回复)

沙发

单看插入的那段程序,好像没有问题。
是不是其他地方的问题?
比如struct bitree *s,  本来是不完整的。插入之后导致
整棵树被破坏了。

板凳

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct bitree
{int data;
 struct bitree *left;
 struct bitree *right;
};
void search (struct bitree *b,int x)
{if(b==NULL)
    printf("can not find this elem!\n");
 else
    {if(b->data==x) printf("this elem exists in this tree!\n");
     if(x<b->data)  search(b->left,x);
     else  search(b->right,x);
    }
}
void insert(struct bitree **c,struct bitree *s)
{
 if((*c)==NULL) (*c)=s;
 else if(s->data<(*c)->data) insert(&((*c)->left),s);
 else if(s->data>(*c)->data||s->data==(*c)->data)
 insert(&((*c)->right),s);
}
void create(struct bitree **b)
{int x,n,i;
 struct bitree *s;
 (*b)=(struct bitree *)malloc(sizeof(struct bitree));
 (*b)=NULL;
 printf("please input the num of elem:\n");
 scanf("%d",&n);
 fflush(stdin);
 for(i=1;i<=n;i++)
 {scanf("%d",&x);
  s=(struct bitree *)malloc(sizeof(struct bitree));
  s->data=x;s->left=NULL;s->right=NULL;
  insert(&(*b),s);}
}
postorder (struct bitree *d)
{if(!d) return -1;
 else
     {postorder(d->left);
      postorder(d->right);
      printf("%2d",d->data);
     }
}
main()
{struct bitree *b;
 create(&b);
 postorder(b);
 search(b,10);
}
还是指针的问题,修改了create和insert的指针部分

我来回复

您尚未登录,请登录后再回复。点此登录或注册