2018-12-26

二叉树的建立与遍历

#include
#include
//二叉树 
struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
};
//显示结点信息
void display(char c,int level){
    printf("%c位于第%d层\n",c,level);
}
//二叉树建立
void creatBiTree(struct BiTNode **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 PreOrderTraversal(struct BiTNode *t,int level){
    if(t){
        //访问根结点 
        display((t)->data,level);
        //前序遍历左子树 
        PreOrderTraversal((t)->lchild,level+1);
        //前序遍历右子树 
        PreOrderTraversal((t)->rchild,level+1);
     }
 }
//二叉树中序遍历
void InorderTraversal(struct BiTNode *t,int level){
    if(t){
        //中序遍历左子树 
        InorderTraversal((t)->lchild,level+1);
        //访问根节点 
        display((t)->data,level);
        //中序遍历右子树 
        InorderTraversal((t)->rchild,level+1);
     }
}  
//二叉树后序遍历 
void PostorderTraversal(struct BiTNode *t,int level){
    if(t){
        //后序遍历左子树 
        PostorderTraversal((t)->lchild,level+1);
        //后序遍历右子树 
        PostorderTraversal((t)->rchild,level+1);
        //访问根节点 
        display((t)->data,level);
     }
}
int main(){
    struct BiTNode *t;
    creatBiTree(&t);
    printf("前序遍历:\n");
    PreOrderTraversal(t,1);
    printf("中序遍历:\n");
    InorderTraversal(t,1);
    printf("后序遍历:\n");
    PostorderTraversal(t,1);
    return 0;
} 

你可能感兴趣的:(2018-12-26)