数据结构(四)二叉树的遍历

问题:利用二叉链表建立一棵二叉树,分别采用先序、中序和后序遍历该二叉树,并输出遍历的序列。

考察二叉树的结构特征,以及链式存储结构的特点及程序设计方法

#include 

#include 

#define MAX 100 

  

typedef struct BiTNode

{          //定义二叉树 

    char data; 

    struct BiTNode *lchild,*rchild; 

}BiTNode,*BiTree; 

 

 

void CreateBiTree(BiTree *T)

    char data; 

    //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 

    scanf("%c",&data); 

    if(data == '#')

    { 

        *T = NULL; 

    } 

    else{ 

        *T =(BiTree)malloc(sizeof(BiTNode)); 

        (*T)->data = data;           //生成根结点

       CreateBiTree(&(*T)->lchild); //构造左子树  

       CreateBiTree(&(*T)->rchild); //构造右子树

    } 

}   

void Visit(BiTree T)

{              //输出 

 

 

    if(T->data != '#'){ 

        printf("%c",T->data); 

    } 

void PreOrder(BiTree T)

{          //先序遍历 

 

 

    if(T != NULL)

    { 

      

        Visit(T);              //访问根节点

        PreOrder(T->lchild);  //访问左子结点 

        PreOrder(T->rchild);  //访问右子结点

    } 

void InOrder(BiTree T)

{        //中序遍历 

 

    if(T != NULL){ 

        InOrder(T->lchild);   //访问左子结点 

        Visit(T);            //访问根节点  

        InOrder(T->rchild);  //访问右子结点

    } 

void PostOrder(BiTree T)

{         //后序遍历 

 

    if(T != NULL)

    { 

        PostOrder(T->lchild);    //访问左子结点

        PostOrder(T->rchild);  //访问右子结点 

        Visit(T);             //访问根节点 

    } 

  

int main() 

    BiTree T; 

    printf("Please input binary tree:"); 

    CreateBiTree(&T); 

    printf("\npreodertraversal:"); 

    PreOrder(T); 

    printf("\ninoder traversal:"); 

    InOrder(T); 

    printf("\nPostordertraversal:"); 

    PostOrder(T); 

    return 0; 

}  

数据结构(四)二叉树的遍历_第1张图片

你可能感兴趣的:(C语言)