天天看點

二叉樹前中後周遊

#include <stdio.h>
#include <malloc.h>
typedef char ElemType;//二叉樹數組類型為字元

//二叉樹定義
typedef struct node
{
    ElemType data;//節點資訊
    struct node* lchild, * rchild;//左右兒子,增加,*parent雙親指針就是三叉鍊
}Bnode,*BTree;
//初始化二叉鍊
void InitBTree(BTree& BT)
{
    BT = NULL;
}
//建立二叉鍊
void CreateBTree(BTree &BT)//分别指向左右
{
    char data;
    data = getchar();
    if (data == '#')    BT = NULL;
    else
    {
        BT = (BTree)malloc(sizeof(Bnode));//配置設定空間
        BT->data = data;
        CreateBTree(BT->lchild);//分别建立左右節點
        CreateBTree(BT->rchild);
    }
}
//void visit(BTree p)
//{
//  printf_s("%c", p->data);//通路根節點
//}
//先序(根)周遊
void preorder(BTree p)
{
    if (p != NULL)
    {
        //visit(p);
        printf_s("%c", p->data);//通路根節點
        preorder(p->lchild);//周遊左
        preorder(p->rchild);//周遊右
    }
}
//中序(根)周遊
void inorder(BTree p)
{
    if (p != NULL);
    {
        inorder(p->lchild);//中根順序周遊左子樹
        //visit(p);//通路根節點
        printf_s("%c", p->data);//通路根節點
        inorder(p->rchild);
    }
}
//後根周遊
void postorder(BTree p)
{
    if (p != NULL)
    {
        postorder(p->lchild);//按後根周遊左子樹
        postorder(p->rchild);
        //visit(p);
        printf_s("%c", p->data);//通路根節點
    }
}
int main()
{
    BTree bt;
    //printf_s("二叉樹初始化中....");
    InitBTree(bt);//初始化樹
    printf_s("請輸入給定的先根序列:\n");
    CreateBTree(bt);//建立樹
    printf_s("給定的二叉樹先跟序列為:\n");
    preorder(bt);//先跟周遊
    printf_s("二叉樹中序序列結果為:\n");
    inorder(bt);//中根周遊
    printf_s("二叉樹後序序列為:\n");
    postorder(bt);//後根周遊
    return 0;
}      

有問題留言

繼續閱讀