| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖
标题:各位大侠看看,错在哪呢?输出的结果不是我想要的
取消只看楼主 加入收藏
enenen
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2011-7-6
结帖率:100%
收藏
 问题点数:0 回复次数:0 
各位大侠看看,错在哪呢?输出的结果不是我想要的

 题目是这样的:    设计一个读入一串整数构成一颗二叉排序树的程序,从二叉
                    排序树中删除一个结点,使该二叉树仍保持二叉排序树的特性
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define  FALSE 0
#define  TRUE  1
#define  EQ(a,b) ((a)==(b))
#define  LT(a,b) ((a)< (b))

int flag=1;
int key;


typedef  struct BiNode
{
    int elem;
    struct BiNode *Lchild,*Rchild;

}BiNode,*BiTree;



bool SearchBST(BiTree T,int e,BiTree f,BiTree &p)   //查找二叉排序树中有无e元素
{
   if(!T)
   {
      p=f;
      return FALSE;
   }
   else if(EQ(e,T->elem))
   {
      p=T;
      return TRUE;
   }
   else if(LT(e,T->elem))
       return SearchBST(T->Lchild,e,T,p);
   else
       return SearchBST(T->Lchild,e,T,p);
   

}

void Print(int e)  //打印函数
{
  printf("%d\n",e);
}


bool InOrder(BiTree T,void(*visit)(int e))  //中序遍历
{
   if(T)
   {
      InOrder(T->Lchild,visit);
      visit(T->elem);
     InOrder(T->Rchild,visit);
   
   }
 return TRUE;

}


bool InsertBST(BiTree &T, int e)  //添加新的元素
{  
    BiTree p;
   if(!SearchBST(T,e,NULL,p))
   {
         BiTree s=(BiTree)malloc(sizeof(BiNode));
         s->elem=e;
            s->Lchild=s->Rchild=NULL;
         if(!p)
             T=s;
         else if(LT(e,p->elem))
             p->Lchild=s;
         else
             p->Rchild=s;
         return TRUE;
   }
   else return FALSE;

}


int CreatBST(BiTree &T)   //创建二叉排序数
{  
    int e;
    if(flag==1)
    {
        printf("输入根节点的值:");
        scanf("%d",&e);
         T=(BiTree)malloc(sizeof(BiNode));
         T->elem=e;
         T->Lchild=T->Rchild=NULL;
         flag+=1;
    }
    printf("输入下一个节点的值:");
        scanf("%d",&e);
   while(e!=0)
   {
     InsertBST(T,e);
     printf("输入下一个节点的值:");
     scanf("%d",&e);
   }
   return TRUE;
}



bool Delete(BiTree &p)  //删除其中的一个元素
{
   if(!p->Rchild)
   {
       BiTree q=p;
       p=p->Lchild;
       free(q);
   }
   else if(!p->Lchild)
   {
       BiTree Q=p;
       p=p->Rchild;
       free(p);
   }
   else
   {
      BiTree q=p;
      BiTree s=p->Lchild;
      while(s->Rchild)
      {
         q=s;
         s=s->Rchild;
      }
      p->elem=s->elem;
      if(q!=p)
          q->Rchild=s->Lchild;
      else
          q->Lchild=s->Lchild;
      free(s);   
   }
return TRUE;
}

bool DeleteBST(BiTree &T,int e)
{
   if(!T)
       return FALSE;
   else
   {
      if(EQ(e,T->elem))
          return Delete(T);
      else if(LT(e,T->elem))
          return DeleteBST(T->Lchild,e);
      else
          return DeleteBST(T->Rchild,e);
   }

}

int main()
{
  BiTree T;
  int e;
  CreatBST(T);
  InOrder(T,Print);
  printf("输入你想插入的值:");
  scanf("%d",&e);
  InsertBST(T, e);
  InOrder(T,Print);
  printf("输入你想删除的值:");
  scanf("%d",&e);
  DeleteBST(T, e);
  InOrder(T,Print);
  return 0;
}
搜索更多相关主题的帖子: include 元素 二叉树 
2011-07-21 11:10
快速回复:各位大侠看看,错在哪呢?输出的结果不是我想要的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033377 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved