题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
package Proxy;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Q22_把二叉树打印成多行 {
class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
if (pRoot == null) {
return new ArrayList<ArrayList<Integer>>();
}
// 层次遍历
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
Queue<TreeNode> queue1 = new LinkedList<TreeNode>(); // 奇数行队列
Queue<TreeNode> queue2 = new LinkedList<TreeNode>(); // 偶数行队列
queue1.add(pRoot);
while (!queue1.isEmpty() || !queue2.isEmpty()) {
// 如果queue1不空,queue2空
if (!queue1.isEmpty()) {
ArrayList<Integer> hang = new ArrayList<Integer>();
// 输出queue1所有节点
while (!queue1.isEmpty()) {
TreeNode curNode = queue1.poll();
hang.add(curNode.val);
if (curNode.left != null) {
queue2.add(curNode.left);
}
if (curNode.right != null) {
queue2.add(curNode.right);
}
}
result.add(hang);
}
// 如果queue2非空,queue1空
if (!queue2.isEmpty()) {
ArrayList<Integer> hang = new ArrayList<Integer>();
// 输出queue2所有节点
while (!queue2.isEmpty()) {
TreeNode curNode = queue2.poll();
hang.add(curNode.val);
if (curNode.left != null) {
queue1.add(curNode.left);
}
if (curNode.right != null) {
queue1.add(curNode.right);
}
}
result.add(hang);
}
}
// 处理完毕,输出
return result;
}
}
}