伪装不出的笑 发表于 2012-12-20 20:23:08

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

#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);
}
}

故乡的风 发表于 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);
        }
}

183560656 发表于 2013-3-7 20:08:01

说实话楼主这代码我看了十分钟真不知道写的什么??

x87648510 发表于 2013-4-10 20:18:04

无回帖,不论坛,这才是人道。
页: [1]
查看完整版本: 求大侠调一下我的二叉排序树,运行九死循环