题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:用队列,每次打印一层。(需要两个变量:一个用于存当前没有打印的节点数,另一个用于存下层的节点数)
代码:
import java.util.ArrayList; import java.util.*; /* 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<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); if(pRoot == null){ return list; } Queue<TreeNode> layer = new LinkedList<TreeNode>(); ArrayList<Integer> layerList = new ArrayList<Integer>(); layer.add(pRoot); int now = 1; int next = 0; while(!layer.isEmpty()){ TreeNode t = layer.remove(); now--; layerList.add(t.val); if(t.left != null){ layer.add(t.left); next++; } if(t.right != null){ layer.add(t.right); next++; } if(now == 0){ list.add(new ArrayList<Integer>(layerList)); layerList.clear(); now = next; next = 0; } } return list; } }