binarytree.c

来自「这是我的一些数据结构(C语言)源代码 比如LinkList」· C语言 代码 · 共 98 行

C
98
字号
#include <stdio.h>
#include <stdlib.h>

typedef char TElemType;
typedef struct BiTnode{
    TElemType   data;
    struct BiTnode *lchild, *rchild;
}BiTNode, *BiTree;

void CreateBiTree(BiTree *T){
    TElemType   ch;

    printf("Enter element(enter '#' node is empty):\n");
    ch = getchar();
    if(ch == '#') *T = NULL;
    else{
        *T = (BiTNode *)malloc(sizeof(BiTNode));
        if(!(*T)) exit(-1);
        (*T)->data = ch;
        CreateBiTree( &(*T)->lchild );
        CreateBiTree( &(*T)->rchild );
    }
} 

void DestroyBiTree(BiTree tree){
    //BiTree T;
    //T = tree;
    //if(tree->lchild) tree = tree->lchild;
    //else tree = tree->rchild;
    //free(T);
    printf("Free tree.\n");
    free(tree);
}
void Destroy(BiTree T){
    if(T){
        if(T->lchild)
            Destroy(T->lchild);
        if(T->rchild)
            Destroy(T->rchild);
        printf("Free tree.\n");
        free(T);  
    }
}
             
void PreOrderTraverse(BiTree T, void(* Visit)(BiTree Tree) ){
    if(T){
        Visit(T);
        PreOrderTraverse(T->lchild, Visit);
        PreOrderTraverse(T->rchild, Visit);
    }   
} 

void InOrderTraverse(BiTree T, void(* Visit)(BiTree Tree) ){
    if(T){
        PreOrderTraverse(T->lchild, Visit);
        Visit(T);
        PreOrderTraverse(T->rchild, Visit);
    }   
}

void PostOrderTraverse(BiTree T, void(* Visit)(BiTree Tree) ){
    if(T){
        PreOrderTraverse(T->lchild, Visit);
        PreOrderTraverse(T->rchild, Visit);
        Visit(T);
    }   
}
               
void PrintElement(BiTree T){
    printf("%3c", T->data);
} 
               
int main()
{
    BiTree tree1;

    printf("Create tree:\n");
    CreateBiTree(&tree1);

    printf("Pre Order Traverse tree:\n");
    PreOrderTraverse(tree1, PrintElement);
    
    printf("\nIn Order Traverse tree:\n");
    InOrderTraverse(tree1, PrintElement);
    
    printf("\nPost Order Traverse tree:\n");
    PostOrderTraverse(tree1, PrintElement);

    printf("\nDestroy tree:\n");
    //PostOrderTraverse(tree1, DestroyBiTree); 
    Destroy(tree1);   

    system("pause");
    return 0;
}    
        
            

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?