标签:node 遍历 Treenode 层次 vector que result push 二叉树
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 }
标签:node,遍历,Treenode,层次,vector,que,result,push,二叉树 来源: https://www.cnblogs.com/pine-apple/p/15757082.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。