| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:用队列判断完全二叉树,找不出错误
取消只看楼主 加入收藏
惜缘0310
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-11-17
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
用队列判断完全二叉树,找不出错误
#include "stdlib.h"
#include "stdio.h"
#define maxsize 100
struct node
{
    char date;
    struct node *lch,*rch;
};
struct node *creat(struct node *root) \\创建二叉树
{
    char x;
    int i,j;
    struct node *p,*s[maxsize];
    printf("input i,x:");
    scanf("%d,%c",&i,&x);
    while(x!='0'&&i!=0)
    {
        p=(struct node*)malloc(sizeof(struct node));
        p->date=x;
        p->lch=NULL;
        p->rch=NULL;
        s[i]=p;
        if(i==1)
        root=p;
        else
        {j=i/2;
            if(i%2==0)
            s[j]->lch=p;
            else
            s[j]->rch=p;
        }
        scanf("%d,%c",&i,&x);
    }
 
      return (root);
}
int panduan()
{    int front=1,rear=1;
    struct node *root,*s[maxsize];
    root=(struct node*)malloc(sizeof(struct node));
    root=creat(root);
     
    s[front]=root;
    while((s[front]->lch!=NULL)&&(s[front]->rch!=NULL))\\找出左右孩子有一个为空的叶子
       {
       s[++rear]=s[front]->lch;
       s[++rear]=s[front]->rch;
       front++;
       }
   if((s[front]->lch=NULL)&&(s[front]->rch!=NULL))\\若左为空右不为空则返回0
      return 0;
   else
     {
          if((s[front]->lch!=NULL)&&(s[front]->rch=NULL))\\若左不为空右为空则左进队
             {s[++rear]=s[front]->lch;}
            
          while(front!=rear&&((s[front]->lch!=NULL)||(s[front]->rch!=NULL)))\\判断后面是否全为空的叶子
             {
                 front++;
                 
             }
           
         if(rear==front)
           return 1;
         else
           return 0;
         
      }
}
main()
{   
    int i;
    i=panduan();
    if(i==1)
    printf("是完全二叉树");
    else
    printf("不是完全二叉树");
}

只能返回0.我找不到哪儿错了
学得不好请多指教
搜索更多相关主题的帖子: include 二叉树 
2012-12-15 22:54
惜缘0310
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-11-17
收藏
得分:0 
那是我后加的,程序里没有,不重要,重要的是能不能帮我找出错哪儿了
2012-12-16 23:43
惜缘0310
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-11-17
收藏
得分:0 
我知道有点复杂,可是当时这个想法直接出来了,我觉得 else
      {
           if((s[front]->lch!=NULL)&&(s[front]->rch=NULL))\\若左不为空右为空则左进队
              {s[++rear]=s[front]->lch;}
              
          while(front!=rear&&((s[front]->lch!=NULL)||(s[front]->rch!=NULL)))\\判断后面是否全为空的叶子
              {
                  front++;
                  
              }
            这里有错,但不知怎么改
2012-12-18 22:38
快速回复:用队列判断完全二叉树,找不出错误
数据加载中...
 
   



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

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