按层次打印二叉树

作者: IT_Matters | 来源:发表于2016-07-08 14:55 被阅读802次

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点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;
    }
}

相关文章

  • 算法(3)层次顺序遍历二叉树

    问题:按照层次顺序遍历二叉树,每层换行打印 1、普通的按层打印二叉树只需要使用队列就可以了2、按层打印二叉树,需要...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

  • 22-从上往下打印二叉树-广度优先

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 从下打印就是按层次打印,其实也就是树的广度...

  • 按层次打印二叉树

    有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果,结果按照每一层一...

  • 面试题32:从上到下打印二叉树

    题目1:不分行从上到下打印二叉树,层次遍历 解析:该问题就是二叉树的层次遍历。 题目2:分行从上到下打印二叉树。 ...

  • [剑指offer]刷题笔记

    按之字顺序打印二叉树 把二叉树打印成多行 按之字顺序打印二叉树【树】【常考!!!】 题目描述:请实现一个函数按照之...

  • 从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 按层次遍历,需要用到队列 注:此处queu...

  • 第一章_二叉树打印_字符串__5个案例_2019-03-13

    二叉树打印 1、按层次遍历书并打印,要求遍历完一层后换行解决方法:利用一个队列qe和两个变量last和nlast ...

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

  • Week21 0807--0813

    question 1打印二叉树 给定一个二叉树,按要求打印节点 我的方法: 先用BFS遍历整个树得到按层存储的节点...

网友评论

    本文标题:按层次打印二叉树

    本文链接:https://www.haomeiwen.com/subject/rfcrjttx.html