题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:
这道题主要方法我是使用两个队列(ArrayList模拟队列)实现的,一个队列一行分别进行模拟队列出队列。当第一个队列出来后,下一层的数据也就按照从左到右的顺序放入到第二个队列。先进先出,出来的顺序也就是从左到右。
实现:
import java.util.ArrayList;
import java.util.Stack;
import java.util.Queue;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
/*
这道题的主要方法我是使用两个队列(ArrayList模拟队列)实现的,一个队列一行分别进行模拟队列出队列。
当第一个队列出来后,下一层的数据也就按照从左到右的顺序放入到第二个队列。先进先出,出来的顺序也就是从左到右
*/
//s1存奇数层节点
ArrayList<TreeNode> list1 = new ArrayList<TreeNode>();
list1.add(pRoot);
ArrayList<TreeNode> list2 = new ArrayList<TreeNode>();
ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
while (!list1.isEmpty()|| !list2.isEmpty()) {
if (!list1.isEmpty()) {
ArrayList<Integer> temp = new ArrayList<Integer>();
while (!list1.isEmpty()) {
TreeNode node = list1.remove(0);
if(node != null) {
temp.add(node.val);
list2.add(node.left);
list2.add(node.right);
}
}
if (!temp.isEmpty()) {
lists.add(temp);
}
} else {
ArrayList<Integer> temp = new ArrayList<Integer>();
while (!list2.isEmpty()) {
TreeNode node = list2.remove(0);
if(node != null) {
temp.add(node.val);
list1.add(node.left);
list1.add(node.right);
}
}
if (!temp.isEmpty()) {
lists.add(temp);
}
}
}
return lists;
}
}