Q22_把二叉树打印成多行

来源:互联网 发布:众泰e200和知豆 编辑:程序博客网 时间:2024/06/14 21:37

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

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;}}}