[leetcode] Binary Tree Zigzag Level Order Traversal
2015-07-13 16:11
429 查看
#include<iostream> #include<list> #include<queue> #include<vector> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int value):val(value),left(NULL),right(NULL){}; }; class Solution { public: void level(TreeNode* root) { deque<TreeNode*>resultnode; deque<TreeNode*>resnode; vector<vector<int>>resultdata; vector<int>resdata; TreeNode* cur=root; resnode.push_back(cur); bool flag=false; while(!resnode.empty()) { while(!resnode.empty()) { resdata.push_back(resnode.front()->val); if(resnode.front()->left) resultnode.push_back(resnode.front()->left); if(resnode.front()->right) resultnode.push_back(resnode.front()->right); resnode.pop_front(); } if(flag) reverse(resdata.begin(),resdata.end()); flag=!flag; resultdata.push_back(resdata); resdata.clear(); swap(resnode,resultnode); } for(auto i:resultdata) for(auto j:i) cout<<j<<' '; cout<<endl; } void leve2(TreeNode* root) { deque<TreeNode*>resultnode; deque<TreeNode*>resnode; vector<vector<int>>resultdata; vector<int>resdata; TreeNode* cur=root; resnode.push_back(cur); resnode.push_back(nullptr); bool flag=false; while(!resnode.empty()) { TreeNode* Node=resnode.front(); if(Node) { resdata.push_back(resnode.front()->val); if(resnode.front()->left) resnode.push_back(resnode.front()->left); if(resnode.front()->right) resnode.push_back(resnode.front()->right); resnode.pop_front(); } else { resnode.pop_front(); if(flag) reverse(resdata.begin(),resdata.end()); flag=!flag; resultdata.push_back(resdata); resdata.clear(); if(!resnode.empty()) resnode.push_back(nullptr); } } for(auto i:resultdata) for(auto j:i) cout<<j<<' '; cout<<endl; } }; void main() { TreeNode* node1=new TreeNode(1); TreeNode* node2=new TreeNode(2); TreeNode* node3=new TreeNode(3); TreeNode* node4=new TreeNode(4); TreeNode* node5=new TreeNode(5); TreeNode* node6=new TreeNode(6); TreeNode* node7=new TreeNode(7); /*node1->left=node2; node1->right=node3; node2->left=node4; node2->right=node5; node3->left=node6; node3->right=node7;*/ /*node2->left=node3; node3->right=node4; node1->right=node5;*/ node1->left=node2; node1->right=node3; node3->left=node4; node3->right=node5; Solution solution; solution.level(node1); solution.leve2(node1); }
相关文章推荐
- Queue注意API
- ExtJs grid 的属性
- 判断两个数组是否相等
- 教程-Delphi第三方控件安装卸载指南
- python mysql
- S.O.L.I.D五大原则- 深入了解javascript
- javaMail编写案列
- jstl 的应用 java
- Nginx 引入线程池,提升 9 倍性能
- Java FileInputStream与FileReader的区别
- Windows2008R2的NFS
- Kali Linux 2.0马上就来了
- JAVA GC 新生代 老年代
- python中的set集合操作
- Struts2拦截器模拟
- GRE写作必备句型
- fragmentManager中的回退栈
- 图片压缩。大小压缩
- 黑马程序员--java基础学习笔记7
- 第三十三讲|三种循环