题目
剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 32 - III. 从上到下打印二叉树 III
解题思路
三道题思路相同,只不过处理格式不同
准备一个队列,将根节点入栈,将根节点弹出的同时记录根节点的值并且将根节点的左右子树入队,以此类推,直到队列中无任何元素
代码
class Solution {
private Queue<TreeNode> queue = new LinkedList<>();
public int[] levelOrder(TreeNode root) {
if(root==null){
return new int[]{};
}
queue.add(root);
List<Integer> list = new ArrayList<>();
while (!queue.isEmpty()) {
int count = queue.size();
while (count > 0) {
list.add(queue.peek().val);
TreeNode node = queue.poll();
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
count--;
}
}
return list.stream().mapToInt(Integer::valueOf).toArray();
}
}
剑指 Offer 32 - II. 从上到下打印二叉树 II
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> answerLists = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) {
return answerLists;
}
solve(root);
return answerLists;
}
public void solve(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int count = queue.size();
List<Integer> list = new ArrayList<Integer>();
while (count > 0) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
count--;
}
answerLists.add(list);
}
}
}
剑指 Offer 32 - III. 从上到下打印二叉树 III
class Solution {
public List<List<Integer>> answerLists = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) {
return answerLists;
}
List<List<Integer>> answer=new ArrayList<>();
solve(root);
int i = 0;
for (List<Integer> ans : answerLists) {
if (i % 2 != 0) {
Collections.reverse(ans);
answer.add(ans);
}else{
answer.add(ans);
}
i++;
}
return answer;
}
public void solve(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int count = queue.size();
List<Integer> list = new ArrayList<Integer>();
while (count > 0) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
count--;
}
answerLists.add(list);
}
}
}