JZ-059-按之字形顺序打印二叉树
2024-10-19 06:07:10
按之字形顺序打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
题目链接: 按之字形顺序打印二叉树
代码
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) {
}
}
【每日寄语】 只要你今天再多努力一下,那个未来可以像星星一样闪闪发光的人就是你呀!
最新文章
- 运行iis出现:The server has encountered an error while loading an application ……的解决办法【转】
- 最长上升子序列O(nlogn)算法详解
- UVa1589 象棋
- Android内存等信息
- QT自定义对象导入JavaScript脚本使用
- [Google Codejam] Round 1A 2016 - The Last Word
- Spring MVC 过滤静态资源访问
- linux下mount/unmount命令
- 结巴分词出现AttributeError: &#39;float&#39; object has no attribute &#39;decode&#39;错误
- Windows下return,exit和ExitProcess的区别和分析
- 单片机I/O口的结构的详解
- GreenDao与ReactiveX的完美搭配
- 去掉HTML标记 .
- 如何优化JavaScript的构造函数
- linux操作Mysql数据库基本命令
- 脚本学习 game.sh
- Checkpoint--相关问题
- 最好最实用的二次开发教程 cms
- (转)一个简单的rest_framework demo
- iOS彩票项目--第三天,搭建竞技场和发现,搭建幸运选号和我的彩票界面