当前位置:网站首页>【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;
}
}
边栏推荐
猜你喜欢
随机推荐
k8s部署mysql
Interfering with BGP routing---community attributes
mysql中的key是怎么用的,或者这个值有什么意义,如下图?
迁移学习 & 凯明初始化
Janus官方DEMO介绍
学习编程的第十二天
多线程是同时执行多个线程的吗
【Leetcode】2104. Sum of Subarray Ranges
&&、||、&、|
你的手机曾经被监控过吗?
UNI-APP_ monitor page scroll h5 monitor page scroll
Vmware中安装win7虚拟机以及相关简单知识
xlrd 与 xlsxwritter 的基本操作
Janus Official DEMO Introduction
函数习题(下)
SRv6性能测量
【技术分享】SLA(服务等级协议)原理与配置
上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链
shader学习笔记(五)
JS--popstate事件--使用/教程/实例