1. 程式人生 > >C++二叉樹的前序建立與前中後遍歷

C++二叉樹的前序建立與前中後遍歷

#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 << ""; }

這裡寫圖片描述