1. 程式人生 > 其它 >二叉樹層次遍歷

二叉樹層次遍歷

 1 #include <iostream>
 2 #include <vector>
 3 #include <queue>
 4 using namespace std;
 5 
 6 void Print(const vector<int> &v)
 7 {
 8     for(auto it:v)
 9     {
10         cout<<it<<" ";
11     }
12     cout<<endl;
13 }
14 struct Treenode//定義樹的節點 
15 {
16
int val; 17 Treenode* left; 18 Treenode* right; 19 Treenode(int _val):val(_val),left(nullptr),right(nullptr){} 20 }; 21 //[in] 樹的根節點 22 //[out] 一維vector的層次遍歷結果 23 //層次遍歷關鍵在於queue的使用 24 vector<int> cenci(Treenode* root) 25 { 26 vector<int> result; 27 queue<Treenode*> que;
28 //if(root==nullptr) return nullptr; 29 que.push(root); 30 while(!que.empty()) 31 { 32 Treenode* node=que.front(); 33 que.pop(); 34 if(node->left) que.push(node->left); 35 if(node->right) que.push(node->right); 36 result.push_back(node->val);
37 } 38 return result; 39 } 40 //[in]樹的根節點 41 //[out]二維vector的層次遍歷結果 42 vector<vector<int>> bianli(Treenode* root) 43 { 44 vector<vector<int>> result;//返回結果 45 queue<Treenode*> que; 46 que.push(root); 47 48 while(!que.empty()) 49 { 50 vector<int> v; 51 size_t size=que.size();//當前行節點個數 52 for(size_t i=0;i<size;++i)//當前行節點的所有子節點加入佇列 53 { 54 Treenode* node=que.front(); 55 que.pop(); 56 if(node->left) que.push(node->left); 57 if(node->right) que.push(node->right); 58 v.push_back(node->val); 59 } 60 result.push_back(v); 61 } 62 return result; 63 64 } 65 int main(int argc, char *argv[]) 66 { 67 68 Treenode *t1=new Treenode(2); 69 Treenode *t2=new Treenode(3); 70 Treenode *t3=new Treenode(4); 71 Treenode *t4=new Treenode(5); 72 t1->left=t2; 73 t1->right=t3; 74 t2->left=t4; 75 //vector<int> result= cenci(t1); 76 //Print(result); 77 vector<vector<int>> result=bianli(t1); 78 for(auto it:result)//遍歷輸出結果 79 { 80 for(auto it2:it) 81 { 82 cout<<it2<<" "; 83 } 84 } 85 return 0; 86 }