【PTA】6-9二叉樹的遍歷

【PTA】6-9二叉樹的遍歷

題目描述

要求分別實現二叉樹的四種遍歷
即前中後以及層序遍歷
接口定義如下

void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );

解題思路

前中後序遍歷倒是比較簡單,本身二叉樹就是遞歸地定義的,在哪個序就將輸出語句放在哪個位置就可以了。
比較麻煩的是層次遍歷
層次遍歷實則對應的是圖的搜索算法中的BFS,但由於二叉樹的性質,如果還建立個隊列、將鄰節點依次入隊又出隊,未免顯得太過於複雜
此處考慮引入數組,分別設置一個head值和tail值,用以存儲迭代遍歷時候的值。當head==tail,說明搜索完畢,停止輸出

代碼

void PreorderTraversal( BinTree BT )
{
    if (BT==NULL) 
        return;
    printf(" %c",BT->Data);
    PreorderTraversal(BT->Left);
    PreorderTraversal(BT->Right);
}
void InorderTraversal( BinTree BT )
{
    if (BT==NULL) 
        return;
    InorderTraversal(BT->Left);
    printf(" %c",BT->Data);
    InorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ){
    if (BT==NULL) 
        return;
    PostorderTraversal(BT->Left);
    PostorderTraversal(BT->Right);
    printf(" %c",BT->Data);
}
void LevelorderTraversal( BinTree BT ){
    if (BT==NULL) 
        return;
    BinTree binTree[100];
    int head=0,tail=0;//初始條件都是0
    binTree[tail++]=BT;//結束設爲節點數
    while(head<tail){
        BinTree temp=binTree[head++];//逐層搜索
        printf(" %c", temp->Data);
        if(temp->Left) binTree[tail++]=temp->Left;
        if(temp->Right) binTree[tail++]=temp->Right;//從左往右搜索
    }
}

總結

前中後序較爲常用且易於理解
層次遍歷經常容易想到的是BFS,而採用輔助數組也是BFS在二叉樹上的“變種”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章