题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
该题和按照之字形打印二叉树差不多,需要每一层输出一行,也就是每一层需要输出一个list,那么需要两个队列进行合作,一个队列出队(保存上一层节点),一个队列入队(保存前一个队列的左右节点,即下一层节点),只不过该题和按照之字形二叉树打印的区别在于,之字形二叉树需要区分奇数层和偶数层,那么就需要两个队列保存左右节点的顺序不一样,上一个队列先保存左节点,再保存右节点;下一个队列先保存右节点,再保存左节点。
代码
import java.util.ArrayList;import java.util.LinkedList;public class Print1 { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); if(pRoot == null) return list; LinkedList<TreeNode> queue1 = new LinkedList<>(); LinkedList<TreeNode> queue2 = new LinkedList<>(); queue1.add(pRoot); while (!queue1.isEmpty() || !queue2.isEmpty()){ if(!queue1.isEmpty()){ ArrayList<Integer> subList = new ArrayList<>(); while (!queue1.isEmpty()){ TreeNode curNode = queue1.pollFirst(); subList.add(curNode.val); if(curNode.left != null){ queue2.add(curNode.left); } if(curNode.right != null){ queue2.add(curNode.right); } } list.add(subList); }else { ArrayList<Integer> subList1 = new ArrayList<>(); while (!queue2.isEmpty()){ TreeNode curNode = queue2.pollFirst(); subList1.add(curNode.val); if(curNode.left != null){ queue1.add(curNode.left); } if(curNode.right != null){ queue1.add(curNode.right); } } list.add(subList1); } } return list; }}