把二叉树打印多行

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

更容易理解的思路,用计数器的方式 和队列 计数每次出队的节点数 等于这一层的节点数时 表明本层遍历完了

import java.util.*;
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode r) {
          ArrayList<ArrayList<Integer> > res = new ArrayList<>();
        if (r==null) return res;
        //保存当前层的节点值
        ArrayList<Integer> list = new ArrayList<>();
        //保存当前层的节点
        LinkedList<TreeNode> q = new LinkedList<>();
        //初始化
        int start = 0;
        //根节点只有1个
        int end = 1;
        q.addLast(r);
        while(!q.isEmpty()){
            TreeNode t = q.removeFirst();
            list.add(t.val);
            //从队列出队一个 就加1;
            start++;
            if(t.left != null){
                q.addLast(t.left);
            } 
            if(t.right != null){
                q.addLast(t.right);
            } 
            //出队的个数 等于这层的数量 表面这层便利完了。
            if (start == end){
                //恢复初始值
                start =0;
                //下一层的节点数
                end = q.size();
                res.add(new ArrayList<>(list));
                list.clear();
            }
        }
        return res;
    }
    
}

思路:设置两个指针,一个指向当前层最右,另一个指向现在遍历的节点,,基本就是bfs。。。加一个换行判断

ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        if(pRoot==null) return new ArrayList<>();
        TreeNode last=pRoot;
           TreeNode nlast=null;
       LinkedList<TreeNode> queue=new LinkedList<TreeNode>();
        ArrayList<Integer> temp=new ArrayList<Integer>();
        ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
        queue.add(pRoot);
        while(!queue.isEmpty()){
               TreeNode cur=queue.poll();
            temp.add(cur.val);
            if(cur.left!=null){
                queue.add(cur.left);
                nlast=cur.left;
            }
            if(cur.right!=null){
                queue.add(cur.right);
                nlast=cur.right;
            }
            if(cur==last){
                res.add(temp);
                temp=new ArrayList<Integer>();
                last=nlast;
            }
        }
        return res;
    }
原文地址:https://www.cnblogs.com/team42/p/6691797.html