编辑代码

#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild, *rchild;
}BiTNode,*BiTree;
//初始化根节点
BiTree init_Tree(BiTree T){
      //创建根节点,让指针T指向根节点
      T = (BiTree)malloc(sizeof(struct BiTNode));
      T->data = 'A';
      T->lchild = NULL;
      T->rchild = NULL;
      return T;
}
BiTree insert_Tree_left(BiTree Tree,char ch){
     BiTree p = (BiTree) malloc(sizeof(struct BiTNode));
     p->lchild = NULL;
     p->rchild = NULL;
     p->data = ch;
     Tree->lchild = p;
     return p;
}
BiTree insert_Tree_right(BiTree Tree,char ch){
    BiTree p = (BiTree) malloc(sizeof(struct BiTNode));
    p->lchild = NULL;
    p->rchild = NULL;
    p->data = ch;
    Tree->rchild = p;
    return p;
}
//访问对应的结点的值
void visit(BiTree tree){
    printf("%c ",tree->data);
    return;
}
 
//树的先序遍历
void preOrder(BiTree T){
    if(T != NULL){
        visit(T);//先访问根节点
        preOrder(T->lchild);//再访问左结点
        preOrder(T->rchild);//最后访问右结点
    }
    return;
}
//中序遍历
void midOrder(BiTree T){
    if(T != NULL){
        midOrder(T->lchild);//先访问左结点
        visit(T);//再访问根结点
        midOrder(T->rchild);//最后访问右结点
    }
    return;
}
void lastOrder(BiTree T){
    if(T != NULL){
        lastOrder(T->lchild);//先访问左结点
        lastOrder(T->rchild);//再访问右结点
        visit(T);//最后访问根节点
    }
    return;
}
int main() {
    BiTree T = NULL;
    T = init_Tree(T);
    BiTree B = insert_Tree_left(T,'B');
    BiTree C = insert_Tree_right(T,'C');
 
    BiTree D = insert_Tree_left(B,'D');
    BiTree E = insert_Tree_right(B,'E');
 
    insert_Tree_right(D,'G');
    insert_Tree_left(C,'F');
    printf("先序遍历:");
    preOrder(T);
    printf("\n");
    printf("中序遍历:");
    midOrder(T);
    printf("\n");
    printf("后序遍历:");
    lastOrder(T);
    return 0;
}