1. 程式人生 > >資料結構--二叉樹遍歷

資料結構--二叉樹遍歷

二叉樹結構體定義

    typedef struct TreeNode *BinTree
    struct TreeNode{
        ElementType Data;
        BinTree Left;
        BinTree Right;
    } 

遍歷函式

    void PreOrderTraversal( BinTree BT ):先序----根、左子樹、右子樹;
    void InOrderTraversal( BinTree BT ): 中序---左子樹、根、右子樹;
    void PostOrderTraversal( Bin
Tree BT ):後序---左子樹、右子樹、根 void LevelOrderTraversal( BinTree BT ):層次遍歷,從上到下、從左到右

前序遍歷函式(遞迴)

    void PreOrderTraversal( BinTree BT ){
        if(BT){
            printf("%d",Bt->Data);
            PreOrderTraversal( BT->Left );
            PreOrderTraversal( BT->Right );
        }
    }

前序遍歷函式(非遞迴)

    void PreOrderTraversal( BinTree BT ){
        BinTree T=BT;
        Stack S=CreatStack(MaxSize);
        //樹不為空 
        //棧不為空 
        while(T||!isEmpty(S)){
            while(T){
                //節點入棧 
                Push(S,T);
                printf("%d",T->Data);
                //轉向左節點
T=T->Left; } if(isEmpty(S)){ //出棧 T=Pop(S); //轉向右節點 T=T->Right; } } }

層次遍歷

    void LevelOrderTraversal ( BinTree BT ){
        Queue Q;
        BinTree T;
        //空樹返回 
        if(!BT) return;
        Q=CreatQueue(MaxSize);
        AddQ(Q,BT);
        while(!Empty(Q)){
            T=DeleteQ(Q);
            printf("%d",T->Data);
            if(T->Left)AddQ(Q,T->Left);
            if(T->Right)AddQ(Q,T->Right);
        } 
    }