一個簡單的創建和遍歷二叉樹的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<<"";
}
