=w=这个以前中后三种方式遍历二叉树的代码,为什么中序遍历和后序遍历输出结果是错误的?

论坛 期权论坛 期权     
悠久之翼丶__   2018-4-26 14:03   6130   1
#include #include #define ElemType char//节点声明,数据域、左孩子指针、右孩子指针typedef struct BiTNode{    char data;    struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//前序建立二叉树BiTree CreateBiTree(){   ...#include
#include
#define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//前序建立二叉树
BiTree CreateBiTree(){
    char ch;
    BiTree T;
    scanf("%c",&ch);
    if(ch=='#')T=NULL;
    else{
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = ch;
        T->lchild = CreateBiTree();
        T->rchild = CreateBiTree();
    }
    return T;//返回根节点
}
//前序遍历二叉树
void PreOrderTraverse(BiTree T){
    if(T){
       printf("%c",T->data);
       PreOrderTraverse(T->lchild);
       PreOrderTraverse(T->rchild);
    }
}

//中序遍历
void InOrderTraverse(BiTree T){
    if(T){
       PreOrderTraverse(T->lchild);
       printf("%c",T->data);
       PreOrderTraverse(T->rchild);
    }
}
//后序遍历
void PostOrderTraverse(BiTree T){
    if(T){
       PreOrderTraverse(T->lchild);
       PreOrderTraverse(T->rchild);
       printf("%c",T->data);
    }
}
int main(){
    BiTree T,U,V;
    T=U=V = CreateBiTree();//建立
    printf("先序遍历为:");
    PreOrderTraverse(T);//输出
    printf("\n");
    printf("中序遍历为:");
    InOrderTraverse(U);
    printf("\n");
    printf("后序遍历为:");
    PostOrderTraverse(V);
    printf("\n");
}

展开

分享到 :
0 人收藏

1 个回复

正序浏览
2#
shenjian9619  2级吧友 | 2018-4-30 01:54:00 发帖IP地址来自
哈哈   我第一次也是这个错误
偷懒在dfs的时候复制了前序的函数名字6次
所以你看你中序和后序的代码里的递归调的都是前序的函数名
//中序遍历
void InOrderTraverse(BiTree T){
    if(T){
       PreOrderTraverse(T->lchild);
       printf("%c",T->data);
       PreOrderTraverse(T->rchild);
    }
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP