| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:用队列判断完全二叉树,找不出错误
只看楼主 加入收藏
惜缘0310
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-11-17
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
用队列判断完全二叉树,找不出错误
#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
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
struct node *creat(struct node *root) \\创建二叉树
哥哥,你的注释用错了 是//  不是\\

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-16 15:35
惜缘0310
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-11-17
收藏
得分:0 
那是我后加的,程序里没有,不重要,重要的是能不能帮我找出错哪儿了
2012-12-16 23:43
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
回复 3楼 惜缘0310
简单的程序  写的有些复杂
2012-12-18 13:12
惜缘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
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 5楼 惜缘0310
单步调试  或是  加些调试日志  看看是那儿有问题


如果可以的话  还是建议 换种解题思路
2012-12-19 09:41
快速回复:用队列判断完全二叉树,找不出错误
数据加载中...
 
   



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

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