按之字形顺序打印二叉树

题目描述

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

题目链接: 按之字形顺序打印二叉树

代码

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack; /**
* 标题:按之字形顺序打印二叉树
* 题目描述
* 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
* 题目链接:
* https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0?tpId=13&&tqId=11212&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
*/
public class Jz59 { public ArrayList<ArrayList<Integer>> print(TreeNode pRoot) {
Queue<TreeNode> treeNodes = new LinkedList<>();
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
treeNodes.add(pRoot);
boolean flag = true; // 当flag为true时,栈从左向右放;当flag为false时,栈从右向左放
while (!treeNodes.isEmpty()) {
int cnt = treeNodes.size();
ArrayList<Integer> curList = new ArrayList<>();
Stack<TreeNode> curNodes = new Stack<>();
while (cnt-- > 0) { TreeNode t = treeNodes.poll();
if (t == null) {
continue;
}
curList.add(t.val);
if (flag) {
curNodes.add(t.left);
curNodes.add(t.right);
} else {
curNodes.add(t.right);
curNodes.add(t.left);
}
}
flag = !flag;
while (!curNodes.isEmpty()) {
treeNodes.add(curNodes.pop());
}
if (!curList.isEmpty()) {
result.add(curList);
}
}
return result;
} public static void main(String[] args) { }
}

【每日寄语】 只要你今天再多努力一下,那个未来可以像星星一样闪闪发光的人就是你呀!

最新文章

  1. 运行iis出现:The server has encountered an error while loading an application ……的解决办法【转】
  2. 最长上升子序列O(nlogn)算法详解
  3. UVa1589 象棋
  4. Android内存等信息
  5. QT自定义对象导入JavaScript脚本使用
  6. [Google Codejam] Round 1A 2016 - The Last Word
  7. Spring MVC 过滤静态资源访问
  8. linux下mount/unmount命令
  9. 结巴分词出现AttributeError: &#39;float&#39; object has no attribute &#39;decode&#39;错误
  10. Windows下return,exit和ExitProcess的区别和分析
  11. 单片机I/O口的结构的详解
  12. GreenDao与ReactiveX的完美搭配
  13. 去掉HTML标记 .
  14. 如何优化JavaScript的构造函数
  15. linux操作Mysql数据库基本命令
  16. 脚本学习 game.sh
  17. Checkpoint--相关问题
  18. 最好最实用的二次开发教程 cms
  19. (转)一个简单的rest_framework demo
  20. iOS彩票项目--第三天,搭建竞技场和发现,搭建幸运选号和我的彩票界面

热门文章

  1. 学习JAVAWEB第二天
  2. Java多线程专题1: 并发与并行的基础概念
  3. 关于Linux安装中NAT模式和桥接模式的区别详解(转载)
  4. Visual Studio 2010 怎么查看函数的重载数量、范围、种类等
  5. SQLite 基础不扎实造成的:error code 19: constraint failed
  6. js修改css
  7. curl 查看接口的网络分段响应时间
  8. SpringBoot+Dubbo+ZooKeeper+Maven入门实践
  9. byte溢出栗子
  10. 有序取出Map集合的元素