C++二叉樹的前序建立與前中後遍歷
阿新 • • 發佈:2019-01-05
#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 << "";
}