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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM