鱼C论坛

 找回密码
 立即注册
查看: 4461|回复: 5

求大侠调一下我的二叉排序树,运行九死循环

[复制链接]
发表于 2012-12-20 20:23:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<malloc.h>

typedef struct BSNode
{
  int elem;
  struct BSNode *lc,*rc;
}BSNode,*BSTree;
BSTree ST;

void InitBSTree(BSTree ST)
{
  ST=(BSTree )malloc(sizeof(BSNode));
  ST->elem=-111;
  ST->lc=ST->rc=NULL;
  printf("创建成功!!");
}

int Search(BSTree ST,int key)
{
int flag=0;
  while(ST)
  {
    if(key>ST->elem)
        {
         ST->rc;
        }
        else
        {
          if(key<ST->elem)
          {
                  ST->lc;
          }
           else
           {
             flag=1;
                 printf("%d",ST->elem);
                }
        }
}
return flag;
}

int InsertNode(BSTree ST,int key)
{
  BSTree p=ST,q,s;
  int flag=0;
  if(!Search(ST,key))
    {
         s=(BSTree )malloc(sizeof(BSNode));
         s->elem=key;
         s->lc=NULL;
         s->rc=NULL;
         flag=1;
         if(ST)
         ST=s;
         else
          {
           if(key>ST->elem)
           ST->rc=s;
            else
                 ST->lc=s;
          }
        }
return flag;
}

void CreateBSTree(BSTree ST,int n)
{
  int i;
  BSTree r,BT;
  for(i=1;i<=n;i++)
  {
   scanf("%d",&r->elem);
   InsertNode(BT,r->elem);
   }
}


void main()
{
BSTree ST;
int a,b,k,d,g,c=1;
char N,n;
InitBSTree(ST);
printf("请输入你要查找的数字");
scanf("%d",&k);
Search(ST,k);
if(a)
{
   printf("查找不存在");
}
printf("你是否想插入数字 是请输入1  否着输入0\n");
scanf("%d",&c);
if(c)
        {printf("请输入你想插入的数字");
b=InsertNode(ST,k);}
else
         ;

if(a)
{printf("元素插入失败");}
else
printf("元素插入成功!!");
printf("是否进行二叉树构造?1是,任意键否");
scanf("%d",&d);
if(d==1)
{
printf("请输入你要的元素个数");
scanf("%d",&g);
CreateBSTree(ST,g);
}
}
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-21 18:15:20 | 显示全部楼层
哥们,说句实话,你的代码风格不太好,建议你选择一种好的风格来书写代码。其次,你的代码逻辑上有些问题,还有很多低级错误,希望以后写代码要多注意。我在你的基础上做了些修改,贴出来你看看,有问题再提出来讨论。
#include<stdio.h>
#include<malloc.h>

typedef struct BSNode 
{
        int elem;
        struct BSNode *lc,*rc;
}BSNode,*BSTree;

//BSTree ST;

void InitBSTree(BSTree &ST) 
{
        ST=(BSTree)malloc(sizeof(BSNode));
        ST->elem=-111;
        ST->lc=NULL;
        ST->rc=NULL;
        printf("创建成功!!\n");
}

int Search(BSTree ST,int key) 
{
        int flag=0;
        while(ST)
        {
                if(key>ST->elem)
        {
                        ST = ST->rc;
        }
        else if(key<ST->elem)
                {
                        ST = ST->lc;
                }        
                else
                {
                        // 找到节点,flag置1
                        flag=1;
            printf("找到数字%d\n",ST->elem);
                        break;
        }
        }
        return flag;
}

int InsertNode(BSTree ST,int key)
{
  BSTree p=ST,q,s;
  int flag=0;
  if(!Search(ST,key))
  {
     s=(BSTree )malloc(sizeof(BSNode));
     s->elem=key;
     s->lc=NULL;
     s->rc=NULL;
     flag=1;

         while(p) {
                 if(key > p->elem) {
                         q = p;
                         p = p->rc;
                 } else if(key < p->elem) {
                         q = p;
                         p = p->lc;
                 }
         }

         if(key > q->elem) {
                 q->rc = s;
         } else {
                 q->lc = s;
         }

  //   if(ST)
                //ST=s;
  //   else
  //   {
                //if(key>ST->elem)
                //ST->rc=s;
                //else
                //ST->lc=s;
  //   }
  }
        
  return flag;
}

void CreateBSTree(BSTree ST,int n)
{
  int i;
  BSTree r,BT;
  r = (BSTree )malloc(sizeof(BSNode));
  r->lc = NULL;
  r->rc = NULL;
  BT = ST;

  for(i=1;i<=n;i++)
  {
   scanf("%d",&r->elem);
   InsertNode(BT,r->elem);
   }
}


void main()
{
        BSTree ST;
        int a,b,k,d,g,c=1;
        char N,n;
        InitBSTree(ST);
        printf("请输入你要查找的数字\n");
        scanf("%d",&k);
        a = Search(ST,k);
        if(!a)
        {
                printf("查找不存在\n");
        }
        printf("你是否想插入数字 是请输入1  否着输入0\n");
        scanf("%d",&c);
        if(c)
    {
                printf("请输入你想插入的数字\n");
                b=InsertNode(ST,k);
        }

        if(!b)
                printf("元素插入失败\n");
        else
                printf("元素插入成功!!\n");

        printf("是否进行二叉树构造?1是,任意键否\n");
        scanf("%d",&d);
        if(d==1)
        {
                printf("请输入你要的元素个数\n");
                scanf("%d",&g);
                CreateBSTree(ST,g); 
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-7 20:08:01 | 显示全部楼层
说实话  楼主这代码我看了十分钟真不知道写的什么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-10 20:18:04 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 00:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表