【思想】
借助队列来处理
要把二叉树按照每行打印出来,我们可以借助一个队列来处理,一开始把root节点放入到对列中,
每次处理,把队列中的元素取出,放入到一个行中(list),然后把队列中的所有信息都换为其下一行
的孩子信息,继续如上处理.直至某一次队列返回空,就跳出while循环,返回结果。
Java代码:
import java.util.*; public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { Queue<TreeNode> queue = new LinkedList(); //处理队列 ArrayList res = new ArrayList(); //结果集合 if(pRoot==null) return new ArrayList(); //把root放入队列 if(pRoot!=null){ queue.offer(pRoot); } //队不为空时处理 while(!queue.isEmpty()){ //把队列中的每个元素放入这行的list ArrayList line = new ArrayList(); //调用change函数,把对中元素换为其下一行的其孩子们 Queue<TreeNode> temp = change(queue,line,res); queue = temp;//把temp队列赋值给queue队列 } //如果queue为空了,就结束了 return res; } //取出传入的queue的所有元素,放入了行集合,也把queu中元素的子节点放入了temp队列中返回 public Queue<TreeNode> change(Queue<TreeNode> queue,ArrayList line,ArrayList res){ Queue<TreeNode> temp = new LinkedList(); //临时存储 while(!queue.isEmpty()){ TreeNode node = queue.poll(); line.add(node.val);//放入本行的集合中 //把其子放入到temp队列中 if(node.left!=null){ temp.offer(node.left); } if(node.right!=null){ temp.offer(node.right); } } res.add(line);//把本行的结果放入总结果集合 //取完了queue的所有元素,放入了行中,也把queu中元素的子放入了temp队列中了,返回 return temp; } }