1. 程式人生 > >PTA 6-2 二叉樹的遍歷(25 分) 25分程式碼 (陣列實現層次遍歷)

PTA 6-2 二叉樹的遍歷(25 分) 25分程式碼 (陣列實現層次遍歷)

前三個 中序 先序 後序遍歷直接遞迴就可以了

最後一個層次遍歷 可以把每一層 用陣列存起來,容易實現

(注: 部落格作為交流使用,請勿抄襲應付作業)

/* 你的程式碼將被嵌在這裡 */

void InorderTraversal( BinTree BT ) {
    if(BT == NULL) return;
    InorderTraversal(BT->Left);
    printf(" %c", BT->Data);
    InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT ) {
    if(BT == NULL) return;
    printf(" %c", BT->Data);
    PreorderTraversal(BT->Left);
    PreorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ) {
    if(BT == NULL) return;
    PostorderTraversal(BT->Left);
    PostorderTraversal(BT->Right);
    printf(" %c", BT->Data);
}

BinTree aa[10000], bb[10000];
int a, b;

#include<string.h>
void print() {
    memset(bb, NULL, sizeof bb);
    b = 0;
    for(int i = 0; i < a; ++i) {
        if(aa[i] != NULL) printf(" %c", aa[i]->Data);
        if(aa[i]->Left != NULL) bb[b++] = aa[i]->Left;
        if(aa[i]->Right != NULL) bb[b++] = aa[i]->Right;
    }
    a = b;
    for(int i = 0; i < b; ++i)
        aa[i] = bb[i];
}

void LevelorderTraversal( BinTree BT ) {
    if(BT == NULL) return;
    a = 1; b = 0;
    aa[0] = BT;
    while(a) print();
}