题目描述

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

 

 

 

题目链接:

https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288?tpId=13&tqId=11213&rp=1&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

 

 

 

 

分析:

用一个队列记录每一行记录。

在打印一行之前,将当前行有多少个节点记录下来,以区分当前和下一行的节点。

 

 

 

 

import java.util.ArrayList;
import java.util.LinkedList;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        if(pRoot == null){
            return list;
        }
        //记录每一层的节点
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(pRoot);
        while(queue.size()!=0){
            //记下当前层所有节点数
            int size = queue.size();
            ArrayList<Integer> arr = new ArrayList<>();
            for(int i=0;i<size;i++){
                TreeNode cur = queue.pop();
                arr.add(cur.val);
                if(cur.left != null){
                    queue.add(cur.left);
                }
                if(cur.right != null){
                    queue.add(cur.right);
                }
            }
            list.add(arr);
        }
        return list;
    }
    
}

 

posted on 2020-06-13 20:56  MoonBeautiful  阅读(171)  评论(0编辑  收藏  举报