注册 登录
编程论坛 数据结构与算法

二叉树的遍历怎么实现不了

a906314530 发布于 2013-04-23 10:01, 805 次点击
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_TREE_SIZE 100
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
char   data;
 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int  CreatBiTree(BiTree &T){
    char ch;
    scanf(&ch);
    if(ch==' ') T=NULL;
    else{
        if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))exit(OVERFLOW);
        T->data=ch;
        CreatBiTree(T->lchild);
        CreatBiTree(T->rchild);

    }
    return OK;
}

void TraverseBiTree(BiTree T){
char ch;
    if(NULL==T)
        return ;
    printf("%c",T->data);
      TraverseBiTree(T->lchild);
        TraverseBiTree(T->rchild);


}//先序
void InOrder(BiTree T){
char ch;
    if(NULL==T)
        return ;
    InOrder(T->lchild);
     printf("%c",T->data);
        InOrder(T->rchild);


}//中序
void PostOrder(BiTree T){
char ch;
    if(NULL==T)
        return ;
    PostOrder(T->lchild);
        PostOrder(T->rchild);
            printf("%c",T->data);

}//后序

int main()
{    char ch;
     struct BiTNode *T=0;
          CreatBiTree(T);
   
     printf("中序遍历:\n");
     InOrder(T);
     printf("\n");
     printf("先序遍历:\n");
      TraverseBiTree(T);
       printf("\n");
         printf("后序遍历:\n");
      PostOrder(T);
return OK;
}
5 回复
#2
逆风而前2013-04-23 16:15
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_TREE_SIZE 100
typedef char TElemType;
typedef int Status;
typedef struct BiTNode
{
char   data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int  CreatBiTree(BiTree &T)
{
    char ch;
    scanf("%c",&ch);
    if(ch==' ')
        T=NULL;
    else
    {
        if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))
            exit(OVERFLOW);
        T->data=ch;
        CreatBiTree(T->lchild);
        CreatBiTree(T->rchild);

    }
    return OK;
}

void TraverseBiTree(BiTree T)
{
//char ch;
    if(NULL==T)
        return ;
    printf("%c",T->data);
    TraverseBiTree(T->lchild);
    TraverseBiTree(T->rchild);


}//先序
void InOrder(BiTree T)
{
//char ch;
    if(NULL==T)
        return ;
    InOrder(T->lchild);
    printf("%c",T->data);
    InOrder(T->rchild);


}//中序
void PostOrder(BiTree T)
{
//char ch;
    if(NULL==T)     
        return ;
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%c",T->data);

}//后序

int main()
{    //char ch;
     struct BiTNode *T=0;
     CreatBiTree(T);
     printf("中序遍历:\n");
     InOrder(T);
     printf("\n\n");
     printf("先序遍历:\n");
     TraverseBiTree(T);
     printf("\n\n");
     printf("后序遍历:\n");
     PostOrder(T);
     printf("\n\n");
     return OK;
}   
#3
逆风而前2013-04-23 16:16
只有本站会员才能查看附件,请 登录
#4
a9063145302013-04-24 10:20
我的错误是那里?求教育……
#5
邓士林2013-04-24 18:43
你 的遍历不对吧!你的每次都没判断根节点,应该这样写吧!
void InOrder(BiTree T){

    if(T!=NULL)         //=NULL是递归结束条件
    {
        InOrder(T->lchild);        //中序遍历根的左子树
     printf("%c",T->data);          //访问根结点
        InOrder(T->rchild);          //右子树
    }
#6
a9063145302013-04-24 20:04
遍历是对的
1