二叉树的打印

来源:互联网 发布:法国斗牛犬 知乎 编辑:程序博客网 时间:2024/06/05 15:22

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。

给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。


import java.util.*; /*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class TreePrinter {    public int[][] printTree(TreeNode root) {        // write code here        if(root==null)            return null;        LinkedList<TreeNode> queue=new LinkedList<TreeNode>();        ArrayList<Integer> arr=new ArrayList<Integer>();        ArrayList<ArrayList<Integer>> ans=new ArrayList<ArrayList<Integer>>();        TreeNode last=root;//初始化根节点为last        TreeNode nlast=null;        TreeNode temp=null;//存储变化内容        queue.add(last);                 while(!queue.isEmpty()){            temp=queue.poll();//poll()——相当于先get然后再remove掉,就是查看的同时,也将这个元素从容器中删除掉。获取并移除此列表的头(第一个元素)            arr.add(temp.val);//val——val 是可变参数,可以理解为是一个Object类型的数组            if(temp.left!=null){                queue.add(temp.left);                nlast=temp.left;            }            if(temp.right!=null){                queue.add(temp.right);                nlast=temp.right;            }            if(temp==last){                ans.add(arr);//即ans+arr                arr=new ArrayList<Integer>();                last=nlast;            }        }        int[][] a=new int[ans.size()][];        for(int i=0;i<ans.size();i++){            a[i]=new int[ans.get(i).size()];            for(int j=0;j<ans.get(i).size();j++){                a[i][j]=ans.get(i).get(j);            }        }        return a;    }}


0 0
原创粉丝点击