Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:[ [3], [9,20], [15,7] ]
考查BFS 宽度优先搜索。实现BFS可以采用队列。

为了实现层序遍历需要知道该层有几个节点,用于控制每一层从Queue中共取多少个元素。

由于输出完该层节点之后,队列中剩下的是该层的下一层所有的子节点。因此可以用Queue.size() 来知道下一层有多少个节点,以此来控制一共从队列中取多少个元素。

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public List<List<Integer>> levelOrder(TreeNode root) {
12         List<List<Integer>> result = new ArrayList<>();
13         
14         if (root == null) {
15             return result;
16         }
17       
18         Queue<TreeNode> queue = new LinkedList<TreeNode>();
19         queue.offer(root);
20         
21         while (!queue.isEmpty()) {
22             ArrayList<Integer> list = new ArrayList<>();
23             int size = queue.size();
24             for (int i = 0; i < size; i++) {
25                 TreeNode node = queue.poll();
26                 list.add(node.val);
27                 if (node.left != null) {
28                     queue.offer(node.left);
29                 }
30                 if (node.right != null) {
31                     queue.offer(node.right);
32                 }
33             }
34             result.add(list);
35         }
36         
37         return result;
38     }
39 }

 

posted @ 2016-03-13 22:35  YuriFLAG  阅读(120)  评论(0)    收藏  举报