题目:把二叉树打印成多行,即每一层打印为一行
代码如下:
//非递归
public ArrayList<ArrayList<Integer>> printLevel(TreeNode root)
{
if(root == null) return null;
ArrayList<ArrayList<Integer>> arrs = new ArrayList<ArrayList<Integer>>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
//记录当前队列的长度
int last = queue.size(), count = 0;
while(!queue.isEmpty())
{
count = 0;//每一次wahile循环结束,将count重置为0
last = queue.size();//重新获取队列中元素的个数
TreeNode node = null;
ArrayList<Integer> list = new ArrayList<Integer>();
while(last > count)
{
node = queue.poll();
list.add(node.value);
if(node.left != null)
{
queue.offer(node.left);
}
if(node.right != null)
{
queue.offer(node.right);
}
count++;
}
arrs.add(list);
}
return arrs;
}
//递归打印
public ArrayList<ArrayList<Integer>> printByRecursion(TreeNode root)
{
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
depth(root,1,list);
return list;
}
public void depth(TreeNode node, int depth, ArrayList<ArrayList<Integer>> list)
{
if(node == null) return null;
if(depth > list.size())
{
list.add(new ArrayList<Integr>());
}
list.get(depth-1).add(node.value);
depth(node.leftNode, depth+1, list);
depth(node.rightNode, depth+1, list);
}