题目描述:

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

分析:

我们都知道二叉树的层次遍历用的是队列。

但是这个的子树的结点是先进后出的,所以我们使用栈更加方便。

而且为了方便,我用了两个栈,因为不是每一次都是先进左子树再进右子树的。

代码:

 /*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > res;
if(pRoot == NULL) return res;
stack<TreeNode*> s1, s2;
s1.push(pRoot);
while() {
vector<int> v1;
while(!s1.empty()) {
TreeNode* top = s1.top();
v1.push_back(top->val);
if(top->left) s2.push(top->left);
if(top->right) s2.push(top->right);
s1.pop();
}
res.push_back(v1);
if(s2.empty()) break;
vector<int> v2;
while(!s2.empty()) {
TreeNode* top = s2.top();
v2.push_back(top->val);
if(top->right) s1.push(top->right);
if(top->left) s1.push(top->left);
s2.pop();
}
res.push_back(v2);
if(s1.empty()) break;
}
return res;
}
};

最新文章

  1. 创业日志N,一听到别人说创业我就怕
  2. [转]史上最全的CSS hack方式一览
  3. 【Java EE 学习 20】【使用过滤器实现登陆验证、权限认证】【观察者模式和监听器(使用监听器实现统计在线IP、登录IP 、踢人功能)】
  4. AP(应付帐管理)
  5. win7和centos双系统安装
  6. AndroidAnnotations部署
  7. input单选框全选与反选
  8. bzoj 2141 : 排队 分块
  9. VS前台设计中的缺陷
  10. 阿录帮帮忙—spring mvc 的hello world
  11. Angular CLI: 发布到 GitHub Pages
  12. 爬虫_网页url设计
  13. echart 常用配置
  14. Unity热更新学习(二) —— ToLua c#与lua的相互调用
  15. log4j打印堆栈信息
  16. scrapy之多环境的选择使用
  17. Reachability
  18. Packt发布了2018年技能提升报告
  19. NPM 使用及npm升级中问题解决
  20. windows linux hosts文件的配置,开发项目中域名跳转等。

热门文章

  1. json中把非json格式的字符串转换成json对象再转换成json字符串
  2. oozie调度中的重试和手工rerun一个workflow
  3. QQ会员活动运营平台架构设计实践——高效自动化运营
  4. Repeater DataTable 折叠动态加载
  5. Goroutine并发调度模型深度解析之手撸一个协程池
  6. 9款很酷炫jQuery/HTML5特效应用 有源码哦~
  7. 学习记录jQuery的animate函数
  8. 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)
  9. Codeforces Round #265 (Div. 2)
  10. 【转】虚拟串口VSPM解决串口编程问题