鱼C论坛

 找回密码
 立即注册
查看: 3839|回复: 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 | 显示全部楼层
哥们,说句实话,你的代码风格不太好,建议你选择一种好的风格来书写代码。其次,你的代码逻辑上有些问题,还有很多低级错误,希望以后写代码要多注意。我在你的基础上做了些修改,贴出来你看看,有问题再提出来讨论。
  1. #include<stdio.h>
  2. #include<malloc.h>

  3. typedef struct BSNode
  4. {
  5.         int elem;
  6.         struct BSNode *lc,*rc;
  7. }BSNode,*BSTree;

  8. //BSTree ST;

  9. void InitBSTree(BSTree &ST)
  10. {
  11.         ST=(BSTree)malloc(sizeof(BSNode));
  12.         ST->elem=-111;
  13.         ST->lc=NULL;
  14.         ST->rc=NULL;
  15.         printf("创建成功!!\n");
  16. }

  17. int Search(BSTree ST,int key)
  18. {
  19.         int flag=0;
  20.         while(ST)
  21.         {
  22.                 if(key>ST->elem)
  23.         {
  24.                         ST = ST->rc;
  25.         }
  26.         else if(key<ST->elem)
  27.                 {
  28.                         ST = ST->lc;
  29.                 }       
  30.                 else
  31.                 {
  32.                         // 找到节点,flag置1
  33.                         flag=1;
  34.             printf("找到数字%d\n",ST->elem);
  35.                         break;
  36.         }
  37.         }
  38.         return flag;
  39. }

  40. int InsertNode(BSTree ST,int key)
  41. {
  42.   BSTree p=ST,q,s;
  43.   int flag=0;
  44.   if(!Search(ST,key))
  45.   {
  46.      s=(BSTree )malloc(sizeof(BSNode));
  47.      s->elem=key;
  48.      s->lc=NULL;
  49.      s->rc=NULL;
  50.      flag=1;

  51.          while(p) {
  52.                  if(key > p->elem) {
  53.                          q = p;
  54.                          p = p->rc;
  55.                  } else if(key < p->elem) {
  56.                          q = p;
  57.                          p = p->lc;
  58.                  }
  59.          }

  60.          if(key > q->elem) {
  61.                  q->rc = s;
  62.          } else {
  63.                  q->lc = s;
  64.          }

  65.   //   if(ST)
  66.                 //ST=s;
  67.   //   else
  68.   //   {
  69.                 //if(key>ST->elem)
  70.                 //ST->rc=s;
  71.                 //else
  72.                 //ST->lc=s;
  73.   //   }
  74.   }
  75.        
  76.   return flag;
  77. }

  78. void CreateBSTree(BSTree ST,int n)
  79. {
  80.   int i;
  81.   BSTree r,BT;
  82.   r = (BSTree )malloc(sizeof(BSNode));
  83.   r->lc = NULL;
  84.   r->rc = NULL;
  85.   BT = ST;

  86.   for(i=1;i<=n;i++)
  87.   {
  88.    scanf("%d",&r->elem);
  89.    InsertNode(BT,r->elem);
  90.    }
  91. }


  92. void main()
  93. {
  94.         BSTree ST;
  95.         int a,b,k,d,g,c=1;
  96.         char N,n;
  97.         InitBSTree(ST);
  98.         printf("请输入你要查找的数字\n");
  99.         scanf("%d",&k);
  100.         a = Search(ST,k);
  101.         if(!a)
  102.         {
  103.                 printf("查找不存在\n");
  104.         }
  105.         printf("你是否想插入数字 是请输入1  否着输入0\n");
  106.         scanf("%d",&c);
  107.         if(c)
  108.     {
  109.                 printf("请输入你想插入的数字\n");
  110.                 b=InsertNode(ST,k);
  111.         }

  112.         if(!b)
  113.                 printf("元素插入失败\n");
  114.         else
  115.                 printf("元素插入成功!!\n");

  116.         printf("是否进行二叉树构造?1是,任意键否\n");
  117.         scanf("%d",&d);
  118.         if(d==1)
  119.         {
  120.                 printf("请输入你要的元素个数\n");
  121.                 scanf("%d",&g);
  122.                 CreateBSTree(ST,g);
  123.         }
  124. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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-3-29 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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