当前位置:网站首页>【JZOF】77按之字形打印二叉树
【JZOF】77按之字形打印二叉树
2022-08-09 22:11:00 【叹了口丶气】
题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解法:
- 第一种解法借助了JDK的Collections.reverse,将集合逆序。如果面试时候要求不许用这个工具类,则需要换一种写法。
public class LeftRightReverseOrder {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
boolean reverse = false;
while (!queue.isEmpty()) {
ArrayList<Integer> list = new ArrayList<>();
int cnt = queue.size();
while (cnt-- > 0) {
TreeNode node = queue.poll();
if (node == null)
continue;
list.add(node.val);
queue.add(node.left);
queue.add(node.right);
}
if (reverse)
Collections.reverse(list);
reverse = !reverse;
if (list.size() != 0)
ret.add(list);
}
return ret;
}
}
- 第二种解法:
采用两个栈的方式来做。
stack1存放奇数层节点,奇数层节点的子节点按照左右的顺序push到stack2。
slack2存放偶数层节点。偶数层节点的子节点按照右左的顺序push到stack1。
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
if (pRoot == null) {
return res;
}
// 奇数层
Stack<TreeNode> s1 = new Stack<>();
// 偶数层
Stack<TreeNode> s2 = new Stack<>();
s1.push(pRoot);
while (!s1.isEmpty() || !s2.isEmpty()) {
ArrayList<Integer> row = new ArrayList<>();
if (!s1.isEmpty()) {
while (!s1.isEmpty()) {
TreeNode node = s1.pop();
row.add(node.val);
if (node.left != null) {
s2.push(node.left);
}
if (node.right != null) {
s2.push(node.right);
}
}
} else {
while (!s2.isEmpty()) {
TreeNode node = s2.pop();
row.add(node.val);
if (node.right != null) {
s1.push(node.right);
}
if (node.left != null) {
s1.push(node.left);
}
}
}
res.add(row);
}
return res;
}
}
边栏推荐
猜你喜欢
随机推荐
ElasticSearcch集群
Transfer Learning & Kemin Initialization
PyQt5:入门使用教程
Day 12 of learning to program
Users should clearly know that quantitative trading is not a simple procedure
OSS文件上传
力扣:518. 零钱兑换 II
力扣:322. 零钱兑换
mysql中的key是怎么用的,或者这个值有什么意义,如下图?
Sun Zhengyi lost 150 billion: it was expensive at the beginning
杂谈——程序员的悲哀
“我“是一名测试/开发程序员,小孙的内心独白......
leetcode:321. 拼接最大数
kubesphere
金仓数据库 KingbaseGIS 使用手册(6.3. 几何对象创建函数)
68.qt quick-qml多级折叠下拉导航菜单 支持动态添加/卸载 支持qml/widget加载等
pip 离线到内网安装包
UNI-APP_ monitor page scroll h5 monitor page scroll
setter与getter访问器属性——数据驱动显示
Qt message mechanism and events









