题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
 
使用两个栈进行存储,我们在打印某一行节点的时候,需要将下一行的节点保存到相应的栈中,如果当前打印奇数层,那么先保存左子节点,再保存右子节点;
如果我们当前打印的偶数层,那么先保存右子节点,再保存左子节点。
注意循环退出条件。
/*
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) {
stack<TreeNode*> odd;//先左后右
stack<TreeNode*> even;//先右后左
vector<vector<int> > result;
if(pRoot == nullptr){
return result;
}
TreeNode* p = pRoot;
int flag = ;
odd.push(p);
while(!odd.empty() || !even.empty()){
vector<int> tmp;
if(flag % ){//当前奇数层
while(!odd.empty()){
p = odd.top();
tmp.push_back(p -> val);
odd.pop();
if(p -> left != nullptr){
even.push(p -> left);
}
if(p -> right != nullptr){
even.push(p -> right);
}
}
result.push_back(tmp);
++flag;
}
else{//当前偶数层
while(!even.empty()){
p = even.top();
tmp.push_back(p -> val);
even.pop();
if(p -> right != nullptr){
odd.push(p -> right);
}
if(p -> left != nullptr){
odd.push(p -> left);
} }
result.push_back(tmp);
++flag;
}
}
return result;
} };
 
 

最新文章

  1. redis消息队列简单应用
  2. [蓝牙] 5、Battery Service module
  3. sizzle源码分析 (4)sizzle 技术总结及值得我们学习的地方
  4. Android 源码 判断网络数据类型
  5. 简谈HTML5与APP技术应用
  6. codeforces 391C3 - The Tournament
  7. angular2地址栏路由配置
  8. 在web page中使鼠标右击失效的几种方法
  9. 使用 VS2017 和 js 进行桌面程序开发 - electron 之 Hello Word
  10. 假面舞会[NOI2008]
  11. 一个综合实例讲解vue的基础知识点。
  12. jsp分页
  13. 判断DataTale中判断某个字段中包含某个数据
  14. WEB前端 HTML
  15. springdataJAP的更新与保存的方法是同一个
  16. linux下用php将doc、ppt转图片
  17. google Guava包的ListenableFuture解析
  18. Hadoop---桥接集群的搭建
  19. 12th 对礼物挑选小工具的WBS功能分解
  20. shell字符串操作技巧

热门文章

  1. ZOJ4102 Array in the Pocket(2019浙江省赛)
  2. golang 中的引号
  3. linux 删除 复制 移动
  4. linux面试经验
  5. wxPython--学习笔记
  6. Numpy 为运算
  7. mysql遇到java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:原始按钮样式(未被操作)
  9. Python 数据的输入
  10. Prometheus组件