1. 程式人生 > >二叉樹的建立和遍歷

二叉樹的建立和遍歷

指示 post 完成 結構 namespace eno else cout treenode

二叉樹是十分重要的數據結構,主要用來存放數據,並且方便查找等操作,在很多地方有廣泛的應用。

今天主要寫的最基本的二叉樹,後續會繼續寫線索二叉樹,二叉排序樹,平衡二叉樹等。

二叉樹的建立思路仍然是采用的遞歸的思想,給定一個指向根節點的指針,然後遞歸調用ceate()函數,自動生成一個二叉樹。就像是在地上挖了個坑(根節點),然後他會拿著斧子(create函數)自己挖一顆很大的洞穴(二叉樹)出來。當然挖坑前需要先定義每個洞長什麽樣(定義節點結構)。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 typedef struct node
 5 {
 6     struct node *lchild;
 7     struct node *rchild;
 8     char data;
 9 }BiTreeNode, *BiTree;      //這裏的*BiTree意思是給 struct node*起了個別名,叫BiTree,所以BiTree為指向節點的指針,
                     並且可以作為指向二叉樹根節點的指針(用以指示二叉樹)。
11 12 void createBiTree(BiTree &T) //這裏加上&意思是傳遞的參數為指針的引用,括號裏面等價於 BiTreeNode* &T 13 {          //這樣的意義在於在函數執行過後,傳遞進來的指針會發生改變(引用的作用),不可以去掉& 14 char c; 15 cin >> c; 16 if(‘#‘ == c) //當遇到#時,令樹的根節點為NULL,從而結束該分支的遞歸 17 T = NULL; 18 else 19 { 20 T = new BiTreeNode; 21 T->data=c; 22 createBiTree(T->lchild); 23 createBiTree(T->rchild); 24 } 25 } 26 27 //前序遍歷二叉樹並打印出來 28 void preorder(BiTree T) 29 { 30 if(T) 31 { 32 cout<<T->data<<" "; 33 preorder(T->lchild); 34 preorder(T->rchild); 35 } 36 } 37 //中序遍歷二叉樹並打印出來 38 void midorder(BiTree T) 39 { 40 if(T) 41 { 42 midorder(T->lchild); 43 cout<<T->data<<" "; 44 midorder(T->rchild); 45 } 46 } 47 //後續遍歷二叉樹並打印出來 48 void postorder(BiTree T) 49 { 50 if(T) 51 { 52 postorder(T->lchild); 53 postorder(T->rchild); 54 cout<<T->data<<" "; 55 } 56 } 57 int main() 58 { 59 BiTree T; //聲明一個指向二叉樹根節點的指針 60 createBiTree(T); 61 cout<<"二叉樹創建完成!"<<endl; 62 cout<<"前序遍歷二叉樹:"<<endl; 63 preorder(T); 64 cout<<endl; 65 cout<<"中序遍歷二叉樹:"<<endl; 66 midorder(T); 67 cout<<endl; 68 cout<<"後序遍歷二叉樹:"<<endl; 69 postorder(T); 70 return 0; 71 }

二叉樹的建立和遍歷