按层次打印二叉树

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

思路

按层次遍历二叉树,只要利用队列就可以实现了.但是要按层次打印的话必须要记录下每层的最后一个节点.这里我们采用两个变量lastnLast分别记录当前行的最后一个节点和目前已知的最后一个节点.当前遍历的节点为cur.

last初始值为root.由nLast负责更新.
nLast一直指向已经遍历的最后一个节点.队列中每加入一个节点,nLast就指向该节点. 并且当cur=last,更新last=nLast

上代码:

/*
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) {
        if(root==null) return null;
        ArrayList<ArrayList<Integer>> nodes=new ArrayList<>();
        ArrayList<Integer> curLine=new ArrayList<>();
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        TreeNode cur=null,last=root,nLast=null;
        while(!queue.isEmpty()){
            cur=queue.poll();
            curLine.add(cur.val);
            if(cur.left!=null){
                queue.offer(cur.left);
                nLast=cur.left;
            }
            if(cur.right!=null){
                queue.offer(cur.right);
                nLast=cur.right;
            }
            if(cur==last){        //节点等于last,说明到达了当前行的最后一个节点,
                nodes.add(curLine);
                last=nLast;
                curLine=new  ArrayList<Integer>();
            }
        }
        int[][]result=new int[nodes.size()][];
        for(int i=0;i<nodes.size();i++){
            curLine=nodes.get(i);
            result[i]=new int[curLine.size()];
            int j=0;
            for(Integer num:curLine){
               result[i][j++]=num;
            }
        } 
        return result;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,491评论 1 31
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,362评论 0 3
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,355评论 0 25
  • 什么是”树“ 树(tree)是包含n(n>0)个结点的有穷集,其中:(1)每个元素称为结点(node)(2)有一个...
    Neo_joke阅读 1,209评论 1 5
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,822评论 0 19