编程实现二叉树的遍历

#include "stdio.h"

typedef struct BiTNode{
    char data;   /*结点的数据域*/
    struct BiTNode *lchild , *rchild;  /*指向左孩子和右孩子*/
} BiTNode , *BiTree;

/*创建一棵二叉树*/
void CreatBiTree(BiTree *T){
    char c;
    scanf("%c",&c);
    if(c == ' ') *T = NULL;
    else{
       *T = (BiTNode * )malloc(sizeof(BiTNode));  /*创建根结点*/
        (*T)->data = c;    /*向根结点中输入数据*/
        CreatBiTree(&((*T)->lchild));  /*递归地创建左子树*/
        CreatBiTree(&((*T)->rchild));  /*递归地创建右子树*/
    }
}

/*遍历二叉树*/
void PreOrderTraverse(BiTree T ){
    if(T){   /*递归结束条件,T为空*/
        printf("%3c",T->data);  /*访问根结点,将根结点内容输出*/
        PreOrderTraverse(T->lchild);  /*先序遍历T的左子树*/
        PreOrderTraverse(T->rchild);  /*先序遍历T的右子数*/
    }
}

void InOrderTraverse(BiTree T){
    if(T){   /*如果二叉树为空,递归遍历结束*/
        InOrderTraverse(T->lchild);  /*中序遍历T的左子树*/ 
        printf("%3c",T->data);       /*访问根结点*/
        InOrderTraverse(T->rchild);  /*中序遍历T的右子数*/
    }
}

void PosOrderTraverse(BiTree T){
    if(T){   /*如果二叉树为空,递归遍历结束*/
        PosOrderTraverse(T->lchild);  /*后序遍历T的左子树*/ 
        PosOrderTraverse(T->rchild);  /*后序遍历T的右子数*/
        printf("%3c",T->data);        /*访问根结点*/
    }
}

main()
{
   BiTree T = NULL;  /*最开始T指向空*/
   printf("Input some characters to create a binary tree\n");
   CreatBiTree(&T);  /*创建二叉树*/
   printf("The squence of preorder traversaling binary tree\n");
   PreOrderTraverse(T); /*先序遍历二叉树*/
   printf("\nThe squence of inorder traversaling binary tree\n");
   InOrderTraverse(T);  /*中序遍历二叉树*/
   printf("\nThe squence of posorder traversaling binary tree\n");
   PosOrderTraverse(T); /*后序遍历二叉树*/
   getchar();
   getchar();
}
 

你可能感兴趣的:(程序员面试笔记,树)