二叉樹的遞歸創建和遍歷

圖文均來自百度搜索

#include <iostream>  
using namespace std;
struct BiTNode {
    char data;
    struct BiTNode *lchild, *rchild;//左右孩子  
};
BiTNode*T;
void CreateBiTree(BiTNode* &T);
void Inorder(BiTNode* &T);
void PreOrderTraverse(BiTNode* &T);
void Posorder(BiTNode* &T);
//===========================================主函數  
int main() {
    cout << "創建一顆樹,其中A->Z字符代表樹的數據,用“#”表示空樹:" << endl;
    CreateBiTree(T);
    cout << "先序遞歸遍歷:" << endl;
    PreOrderTraverse(T);
    cout << endl;
    cout << "中序遞歸遍歷:" << endl;
    Inorder(T);
    cout << endl;
    cout << "後序遞歸遍歷:" << endl;
    Posorder(T);
    cout << endl;
    return 1;
}
//=============================================先序遞歸創建二叉樹樹  
void CreateBiTree(BiTNode* &T) {
    //按先序輸入二叉樹中結點的值(一個字符),空格字符代表空樹,  
    //構造二叉樹表表示二叉樹T。  
    char ch;
    if ((ch = getchar()) == '#')T = NULL;//其中getchar()爲逐個讀入標準庫函數  
    else {
        T = new BiTNode;//產生新的子樹  
        T->data = ch;//由getchar()逐個讀入來  
        CreateBiTree(T->lchild);//遞歸創建左子樹  
        CreateBiTree(T->rchild);//遞歸創建右子樹  
    }
}//CreateTree  
 //===============================================先序遞歸遍歷二叉樹  
void PreOrderTraverse(BiTNode* &T) {
    //先序遞歸遍歷二叉樹  
    if (T) {//當結點不爲空的時候執行  
        cout << T->data;
        PreOrderTraverse(T->lchild);//  
        PreOrderTraverse(T->rchild);
    }
    else cout << "";
}//PreOrderTraverse  
 //================================================中序遍歷二叉樹  
void Inorder(BiTNode* &T) {//中序遞歸遍歷二叉樹  
    if (T) {//bt=null退層  
        Inorder(T->lchild);//中序遍歷左子樹  
        cout << T->data;//訪問參數  
        Inorder(T->rchild);//中序遍歷右子樹  
    }
    else cout << "";
}//Inorder  
 //=================================================後序遞歸遍歷二叉樹  
void Posorder(BiTNode* &T) {
    if (T) {
        Posorder(T->lchild);//後序遞歸遍歷左子樹  
        Posorder(T->rchild);//後序遞歸遍歷右子樹  
        cout << T->data;//訪問根結點  
    }
    else cout << "";
}

前序遍歷:

訪問根結點,前序遍歷左子樹,前序遍歷右子樹 。

中序遍歷:

中序遍歷左子樹,訪問根結點,中序遍歷右子樹,我覺得這個投影法可以參考,方法如下:
這裏寫圖片描述

後序遍歷:

後序遍歷左子樹,後序遍歷右子樹,訪問根結點

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