从上到下打印二叉树

来源:互联网 发布:机械手g402鼠标宏编程 编辑:程序博客网 时间:2024/06/05 11:30

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

解题思路

类似之子形打印,但这里是顺序打印,所以可以用两个队列。

java实现代码:

import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/*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 root) {        ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();        if(root==null)            return list;        Queue<TreeNode> queue1=new LinkedList<TreeNode>();        Queue<TreeNode> queue2=new LinkedList<TreeNode>();        queue1.add(root);        while(!queue1.isEmpty() || !queue2.isEmpty()){            ArrayList<Integer> tmp1=new ArrayList<Integer>();            while(!queue1.isEmpty()){                TreeNode node=queue1.poll();                tmp1.add(node.val);                if(node.left!=null)                    queue2.add(node.left);                if(node.right!=null)                    queue2.add(node.right);            }            //注意:这里要判断tmp list是否为空,因为当queue为空时,上面代码不执行,这样tmp list为空,为空的tmp list不能加入最后的结果list中去            if(!tmp1.isEmpty()){                list.add(tmp1);            }            ArrayList<Integer> tmp2=new ArrayList<Integer>();            while(!queue2.isEmpty()){                TreeNode node=queue2.poll();                tmp2.add(node.val);                if(node.left!=null)                    queue1.add(node.left);                if(node.right!=null)                    queue1.add(node.right);            }            if(!tmp2.isEmpty()){                list.add(tmp2);            }        }        return list;    }}
2 0