学习目标:
目标:熟练运用Java所学知识
学习内容:
本文内容:使用java解决 之字形打印二叉树
题目描述
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7]
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
解题思路
实现代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
if (root == null) {
return list;
}
Stack<TreeNode> s1 = new Stack<>();
Stack<TreeNode> s2 = new Stack<>();
s1.add(root);//将根节点存放到s1中
while (!s1.isEmpty() || !s2.isEmpty()) {
List<Integer> l = new ArrayList<>();
if (!s1.isEmpty()) {
while (!s1.isEmpty()) {
TreeNode temp = s1.peek();
l.add(temp.val);//将节点的值存放到顺序表中
s1.pop();//出栈
if (temp.left != null) {
s2.add(temp.left);//将节点的左孩子存放到s2中
}
if (temp.right != null) {
s2.add(temp.right);//将节点的右孩子存放到s2中
}
}
} else {
while (!s2.isEmpty()) {
TreeNode temp = s2.peek();
l.add(temp.val);//将节点的值存放到顺序表中
s2.pop();
if (temp.right != null) {
s1.add(temp.right);//将节点的右孩子存放到s1中
}
if (temp.left != null) {
s1.add(temp.left);//将节点的左孩子存放到s2中
}
}
}
list.add(l);
}
return list;
}
}