回 帖 发 新 帖 刷新版面

主题:那位高手能否看一下程序错在那里?

下面是一段创建二叉链表和先序和中序算法遍历二叉树的源程序。小弟数据结构学得不是很好,我找很久还是有错误。那位编程高手帮看一下,找出错误。最好能加上后续算法。顺便请教一下,怎样使用函数调用?特别是在数据结构算法中。

#define MAX_TREE_SIZE 100
#define TElemType  int 
#define ok 1
#define ERROR  0
#include"stdio.h" 
typedef TElemType SqBiTree[MAX_TREE_SIZE];
 SqBiTree bt;
typedef struct BiTNode{
   TElemType data;
    struct BiTNode  *lchild,*rchild;
}BiTNode,*BiTree; 

Status CreatBiTree(BiTree *T)
  { scanf("%d",ch);
   if(ch=='')  T=NULL;
   else{
       if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) 
        exit(OVERFLOW);
       T->data=ch;
       CreatBiTree(T->lchild);
       CreatBiTree(T->rchild);
       }
      return T;
   }  
 

Status PreOrderTraverse(BiTree T, Status( *Vist)(TElemType e)){ 
      Status PrintElement(TElementType e){
         printf("%d",e);
        return ok;
    }
 if(T)
    {if(Vist(T->data))
      if(PreOrderTraverse(T->lchild),Vist))
         if(PreOrderTraverse(T->rchild),Vist))
               return  ok;
                return ERROR;
  } 
   else return ok;


Status InorderTraverse(BiTree T,Status(*Vist) (TElementType e)){
   InitStack(S);  p=T;
   while(p||!StackEmpty(S)){
    if((p) {Push(S,p); p=p->lchild;}
     else{
        Pop(S,p);  if(!Vist(p->data)) 
        return ERROR;
         p=p->rchild;
      }
    }
    return ok;
  }
 int main(viod)
{
  int ch,e,t;
  printf("please input the data:");
  Status CreatBiTree(BiTree *T); 
   scanf("%d",&t);
   printf("if you want to use PreOrder,press 1,use the InOder,press 2:");
  switch(t){
   case 1: Status PreOrderTraverse(BiTree T, Status( *Vist)(TElemType e)) ;break;
   case 2: Status InorderTraverse(BiTree T,Status(*Vist) (TElementType e));break;
   default:printf("ERROR!");break;
   }

getch();
}

回复列表 (共1个回复)

沙发

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define FALSE 0
//定义结构体
typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建二叉树
int CreateBiTree(BiTree &T)
{
    char ch;
//    ch=getchar();
    scanf("%c",&ch);
    if(ch=='#')T=NULL;
    else
    {
        if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
        {
            exit(1);
        }
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return OK;
}
//访问函数
int Visit(char e)
{
    printf("%c",e);
    return OK;
}
//先序遍历
int PreOrderTraverse(BiTree T)
{
    if(T)
    {
        if(Visit(T->data))
        {
            if(PreOrderTraverse(T->lchild))
            {
                if(PreOrderTraverse(T->rchild))
                {
                    return OK;
                }
            }
            return FALSE;
        }
        return FALSE;
    }
    else
    {
        return OK;
    }
}
//中序遍历
int InOrderTraverse(BiTree T)
{
    if(T)
    {
        if(InOrderTraverse(T->lchild))
        {
            if(Visit(T->data))
            {
                if(InOrderTraverse(T->rchild))
                {
                    return OK;
                }
            }
            return FALSE;
        }
        return FALSE;
    }
    else
    {
        return OK;
    }
}
//后序遍历
int PostOrderTraverse(BiTree T)
{
    if(T)
    {
        if(PostOrderTraverse(T->lchild))
        {
            if(PostOrderTraverse(T->rchild))
            {
                if(Visit(T->data))
                {
                    return OK;
                }
            }
            return FALSE;
        }
        return FALSE;
    }
    else
    {
        return OK;
    }
}

int main()
{
    BiTree T;
    CreateBiTree(T);
    PreOrderTraverse(T);
    return 0;
}

我来回复

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