二叉树的前序中序后序遍历(C语言描述)




此二叉树前序输入为
AB#D##C##
前序输出为  ABDC
中序输出为  BDAC
后序输出为  DBCA
一、定义二叉树的存储结构
一个二叉树有一个数据域和两个指针域
代码如下
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;
二、创建一个二叉树(前序递归方法创建二叉树)

void CreateBiTree(BiTree *T)
{
    char x;
    scanf("%c",&x);
    if(x=='#')
        *T=NULL;
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
        (*T)->data=x;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}
三、前序遍历一个二叉树
依次访问二叉树  根结点->左孩子->右孩子

void PreOrderTraverse(BiTree T)
{
    if(T==NULL)
        return;
    printf("%c ",T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
}
四、中序遍历二叉树 
依次访问二叉树  左孩子->根结点->右孩子

void MiOrderTraverse(BiTree T)
{
   if(T==NULL)
       return;
   MiOrderTraverse(T->lchild);
   printf("%c ",T->data);
   MiOrderTraverse(T->rchild);
}
}五、后序遍历二叉树 
依次访问二叉树  左孩子->右孩子->根结点

void BackOrderTraverse(BiTree T)
{
    if(T==NULL)
        return;
    BackOrderTraverse(T->lchild);
    BackOrderTraverse(T->rchild);
    printf("%c ",T->data);
}
六、最后是主函数,输出前中后序遍历结果

int main()
{
    printf("先序方式输入一棵二叉树:");
    BiTree T;
    CreateBiTree(&T);
    printf("先序方式遍历结果:\n");
    PreOrderTraverse(T);
    printf("\n");
    printf("中序方式遍历结果:\n");
    MiOrderTraverse(T);
    printf("\n");
    printf("后序方式遍历结果:\n");
    BackOrderTraverse(T);
    printf("\n");
    return 0;
}
最后完整代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
    char x;
    scanf("%c",&x);
    if(x=='#')
        *T=NULL;
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
        (*T)->data=x;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}
void PreOrderTraverse(BiTree T)
{
    if(T==NULL)
        return;
    printf("%c ",T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
}
void MiOrderTraverse(BiTree T)
{
   if(T==NULL)
       return;
   MiOrderTraverse(T->lchild);
   printf("%c ",T->data);
   MiOrderTraverse(T->rchild);
}
void BackOrderTraverse(BiTree T)
{
    if(T==NULL)
        return;
    BackOrderTraverse(T->lchild);
    BackOrderTraverse(T->rchild);
    printf("%c ",T->data);
}

int main()
{
    printf("先序方式输入一棵二叉树:");
    BiTree T;
    CreateBiTree(&T);

    printf("先序方式遍历结果:\n");
    PreOrderTraverse(T);
    printf("\n");

    printf("中序方式遍历结果:\n");
    MiOrderTraverse(T);
    printf("\n");

    printf("后序方式遍历结果:\n");
    BackOrderTraverse(T);
    printf("\n");
    return 0;
}
	
/*
AB#D##C##
前序输出为  ABDC
中序输出为  BDAC
后序输出为  DBCA
*/



























#日常学习##笔试题目#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
4 3 评论
分享
牛客网
牛客企业服务