注册 登录
编程论坛 数据结构与算法

二叉搜索树问题,兄弟们,帮帮忙,看看到底哪错了,感激不尽。。

delmiss 发布于 2013-11-14 18:48, 488 次点击
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
 int data;//节点信息
 struct node *lchild;//左孩子
 struct node *rchild;//右孩子
 }bitnode;

void cre(bitnode **w);
bitnode *InsertBST(bitnode *b,int m);
void zhongxu(bitnode *T);//中序遍历
void del(bitnode *b,int m);

void  cre(bitnode **w)
{
 
 int n,i;
 int a[10];
 printf("Enter the node of number: ");
 scanf("%d",&n);
 
 for(i=0;i<n;i++){    //输入树的结点个数
  printf("Enter the %d integer: ",i+1);
  scanf("%d",&a[i]);
  if(*w==NULL)
    *w=InsertBST(*w,a[i]);
  else
    InsertBST(*w,a[i]);
 }
  
}
bitnode *InsertBST(bitnode *b,int m)
{
 bitnode *p;
 if(b==NULL)
 {
  b=(bitnode *)malloc(sizeof(bitnode));
  b->data=m;
  b->lchild=b->rchild=NULL;
  return b;
 }
 else
 {
  if(m<b->data)
  {
   if(b->lchild!=NULL && m>b->lchild->data)
   {
    p=(bitnode *)malloc(sizeof(bitnode));
    p->data=m;
    p->rchild=NULL;
    p->lchild=b->lchild;
    b->lchild=p;
   }
   else
       InsertBST(b->lchild,m);
  }
  else if(m>b->data)
  {
   if(b->rchild!=NULL && m<b->rchild->data)
   {
    p=(bitnode *)malloc(sizeof(bitnode));
    p->data=m;
    p->lchild=NULL;
    p->rchild=b->rchild;
    b->rchild=p;
   }
   else
       InsertBST(b->rchild,m);
  }
 
 }
}

void zhongxu(bitnode *T)//中序遍历
{
 if(T!=NULL)
 {
   zhongxu(T->lchild);
   printf("%d ",T->data);
   zhongxu(T->rchild);
 }
}

void del(bitnode *b,int m)
{
 bitnode *q,*s;
 if(b->data==m){
  q=b;
  s=q->lchild;
  while(s->rchild){
   q=s;
   s=s->rchild;
  }
  b->data=s->data;
  if(q!=b)
   q->rchild=s->lchild;
  else
   q->lchild=s->lchild;
  free(s);
 }
 else
 {
  if(m<b->data)
    del(b->lchild,m);
  else if(m>b->data)
    del(b->rchild,m);
  else
   printf("No Found! ");
 }
}

main()
{
 bitnode *b=NULL;
 int m,x;
 printf("*******************************\n\n");
 printf("***********0:退出程序**********\n");
 printf("***********1:建立结构**********\n");
 printf("***********2:插入整数**********\n");
 printf("***********3:中序输出**********\n");
 printf("***********4:删除节点**********\n");
 do{
 // printf("\n\n");
  printf("请选择: ");
  scanf("%d",&x);
  switch(x){
   case 0:
    break;
   case 1:
    cre(&b);break;
   case 2:
    printf("请输入整数: ");
    scanf("%d",&m);
    InsertBST(b,m);
    break;
   case 3:
    zhongxu(b);
    break;
   case 4:
       printf("Enter the integer: ");
       scanf("%d",&m);
        del(b,m);
        break;
   default:
    printf("输入错误!");
    break;
  }
 }while(x!=0);
 return 0;
}

0 回复
1