leetcode 102

302 阅读1分钟
//给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 
//
// 
//
// 示例: 
//二叉树:[3,9,20,null,null,15,7], 
//
// 
//    3
//   / \
//  9  20
//    /  \
//   15   7
// 
//
// 返回其层序遍历结果: 
//
// 
//[
//  [3],
//  [9,20],
//  [15,7]
//]
// 
// Related Topics 树 广度优先搜索 
// 👍 858 👎 0


//leetcode submit region begin(Prohibit modification and deletion)

import java.util.ArrayList;


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */

/*整体的逻辑比较简单了,先建一个队列,再建一个二维数组
    把根节点放进队列
    当队列不为空是取出队列的元素(节点),并把节点值放到列表L。
    继续把节点的左右子孩扔入队列。

    整个就是生产和消费队列,生产源头是根,生产链的关联就是树根和左右。

    for循环理论上是不需要的,但是如果是多个节点可能会用到










 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        if(root == null){
            return ret;
        }

        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        while(!queue.isEmpty()){
           List<Integer> level = new ArrayList<Integer>();
           int currentLevelSize = queue.size();
           for(int i=0;i<currentLevelSize;i++){
               TreeNode node = queue.poll();
               level.add(node.val);
               if(node.left != null){
                   queue.add(node.left);
               }

               if(node.right != null){
                   queue.add(node.right);
               }
           }
           ret.add(level);
        }
        return ret;
    }
}
//leetcode submit region end(Prohibit modification and deletion)