回 帖 发 新 帖 刷新版面

主题:二叉树的遍历

#i nclude "stdio.h"
#define maxsize 128
typedef char datatype;
typedef struct node
{datatype data;
 struct node *lchild,*rchild;
} bitree;
bitree *Q[maxsize];
bitree *CREATREE();
PREORDER(bitree *t);
INORDER(bitree *t);
POSTORDER(bitree *t);

main()
{
 bitree *BTroot;
 printf("\n");
 BTroot=CREATREE();
 printf("\npreorder travelsal of binary tree:\n");
 PREORDER(BTroot);
 printf("\ninorder travelsal of binary tree:\n");
 INORDER(BTroot);
 printf("\npostorder travelsal of binary tree:\n");
 POSTORDER(BTroot);
}


bitree *CREATREE()
{char ch;
 int front,rear;
 bitree *root,*s;
 root=NULL;
 front=1;rear=0;
 ch=getchar();getchar();
 while (ch!='#')
 {s=NULL;
 if(ch!='@')
 {
  s=malloc(sizeof(bitree));
  s->data=ch;
  s->lchild=NULL;
  s->rchild=NULL;
 }
 rear++;
 Q[rear]=s;
 if(rear==1) root=s;
 else
 {if (s && Q[front])
    if(rear%2==0)
       Q[front]->lchild=s;
    else
       Q[front]->rchild=s;
  if(rear%2==1) front++;
 }
 ch=getchar();getchar();
 }
 return(root);
}

INORDER(t)
bitree *t;
{
 if(t)
 {
  INORDER(t->lchild);
  printf("\t%c\n,",t->data);
  INORDER(t->rchild);
 }
}

PREORDER(t)
bitree *t;
{
 if(t)
 {
  printf("%c,",t->data);
  PREORDER(t->lchild);
  PREORDER(t->rchild);
 }
}

POSTORDER(t)
bitree *t;
{
 if(t)
 {
  POSTORDER(t->lchild);
  POSTORDER(t->rchild);
  printf("%c,",t->data);
 }
}
有一个错误
谁帮我调试一下
谢谢!!!

回复列表 (共4个回复)

沙发

怎么没人帮忙啊???
郁闷~~~

板凳

你用的教材太老了
建议换新的
都是些小错,帮你重改了一下:

#include <stdio.h>
#include <stdlib.h>

#define maxsize 128
typedef char datatype;
typedef struct node
{
    datatype data;
    struct node *lchild,*rchild;
} bitree;
bitree *Q[maxsize];
bitree *CREATREE();
void PREORDER(bitree *t);
void INORDER(bitree *t);
void POSTORDER(bitree *t);

int main()
{
    bitree *BTroot;
    printf("\n");
    BTroot=CREATREE();
    printf("\npreorder travelsal of binary tree:\n");
    PREORDER(BTroot);
    printf("\ninorder travelsal of binary tree:\n");
    INORDER(BTroot);
    printf("\npostorder travelsal of binary tree:\n");
    POSTORDER(BTroot);
    return 0;
}


bitree *CREATREE()
{
    char ch;
    int front,rear;
    bitree *root,*s;
    root=NULL;
    front=1;rear=0;
    ch=getchar();getchar();
    while (ch!='#')
    {
        s=NULL;
        if(ch!='@')
        {
            s=(node*)malloc(sizeof(bitree));
            s->data=ch;
            s->lchild=NULL;
            s->rchild=NULL;
        }
        rear++;
        Q[rear]=s;
        if(rear==1) root=s;
        else
        {
            if (s && Q[front])
                if(rear%2==0)
                    Q[front]->lchild=s;
                else
                    Q[front]->rchild=s;
                if(rear%2==1) 
                    front++;
        }
        ch=getchar();
        getchar();
    }
    return(root);
}

void INORDER(bitree *t)
{
    if(t)
    {
        INORDER(t->lchild);
        printf("\t%c\n,",t->data);
        INORDER(t->rchild);
    }
}

void PREORDER(bitree *t)
{
    if(t)
    {
        printf("%c,",t->data);
        PREORDER(t->lchild);
        PREORDER(t->rchild);
    }
}

void POSTORDER(bitree *t)
{
    if(t)
    {
        POSTORDER(t->lchild);
        POSTORDER(t->rchild);
        printf("%c,",t->data);
    }
}

3 楼

错误是创建树的时候,没有准确为接点开辟存储空间
s=malloc(sizeof(bitree));
改成:
s=(bitree*)malloc(sizeof(bitree));
或者
s=(node*)malloc(sizeof(bitree));





#include "stdio.h"
#define maxsize 128
typedef char datatype;
typedef struct node
{datatype data;
 struct node *lchild,*rchild;
} bitree;
bitree *Q[maxsize];
bitree *CREATREE();
PREORDER(bitree *t);
INORDER(bitree *t);
POSTORDER(bitree *t);

main()
{
 bitree *BTroot;
 printf("\n");
 BTroot=CREATREE();
 printf("\npreorder travelsal of binary tree:\n");
 PREORDER(BTroot);
 printf("\ninorder travelsal of binary tree:\n");
 INORDER(BTroot);
 printf("\npostorder travelsal of binary tree:\n");
 POSTORDER(BTroot);

}


bitree *CREATREE()
{char ch;
 int front,rear;
 bitree *root,*s;
 root=NULL;
 front=1;rear=0;
 ch=getchar();getchar();
 while (ch!='#')
 {s=NULL;
 if(ch!='@')
 {
  s=(bitree*)malloc(sizeof(bitree));
  s->data=ch;
  s->lchild=NULL;
  s->rchild=NULL;
 }
 rear++;
 Q[rear]=s;
 if(rear==1) root=s;
 else
 {if (s && Q[front])
    if(rear%2==0)
       Q[front]->lchild=s;
    else
       {Q[front]->rchild=s;
       front++;
       }
 }
 ch=getchar();getchar();
 }
 return(root);
}

INORDER(t)
bitree *t;
{
 if(t)
 {
  INORDER(t->lchild);
  printf("\t%c\n,",t->data);
  INORDER(t->rchild);
 }
}

PREORDER(t)
bitree *t;
{
 if(t)
 {
  printf("%c,",t->data);
  PREORDER(t->lchild);
  PREORDER(t->rchild);
 }
}

POSTORDER(t)
bitree *t;
{
 if(t)
 {
  POSTORDER(t->lchild);
  POSTORDER(t->rchild);
  printf("%c,",t->data);
 }
}

4 楼

谢谢两位大哥!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册