把二叉树打印成多行 --剑指offer

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
 
思路:层次遍历。记录每一层的结点树和当前已经访问的这一层结点。count表示这一层共有多少结点,cur表示当前已经访问了这一层的多少结点
 
import java.util.*;

public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> result=new ArrayList<>();
        if(pRoot == null){
            return  result;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(pRoot);
        int cur=0,count=1;
        ArrayList<Integer> list=new ArrayList<>();
        while (!queue.isEmpty()){
            cur ++;
            TreeNode node=queue.poll();
            list.add(node.val);
            if(node.left != null){
                queue.add(node.left);
            }
            if(node.right != null){
                queue.add(node.right);
            }
            if(cur == count){
                count = queue.size();
                cur = 0;
                result.add(new ArrayList<>(list));
                list.clear();
            }
        }
        return result;
    }
}

 

posted @ 2020-03-12 16:06  nlw  阅读(123)  评论(0编辑  收藏  举报