把二叉树打印多行
把二叉树打印成多行
http://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
解法
运用两个队列解决这个层序遍历的问题,工作队列永远是当前输出的那一层,还有一个辅助队列是用来存储孩子结点。如果工作队列空了,在看辅助队列有没有孩子结点。
代码
import java.util.ArrayList; /* 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) { if(pRoot == null){ return new ArrayList<>(); } ArrayList<ArrayList<Integer> > array = new ArrayList<>(); ArrayList<TreeNode> nodes = new ArrayList<>(); nodes.add(pRoot); ArrayList<TreeNode> ch = new ArrayList<>(); ArrayList<Integer> ans = new ArrayList<>(); while(nodes.size() != 0 ){ TreeNode node = nodes.get(0); ans.add(node.val); nodes.remove(0); if(node.left !=null){ ch.add(node.left); } if(node.right != null){ ch.add(node.right); } if(nodes.size() == 0 && ans.size() !=0 ){ array.add(new ArrayList<>(ans)); ans.clear(); nodes.addAll(new ArrayList<>(ch)); ch.clear(); } } return array; } }