题目链接:https://leetcode.com/problems/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]
]
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
解题思路:
1. 很明显的层次遍历了。
2. 要注意的是,不同以往把所有节点都入同一个队列,本题的方法采用同一层的结点进同一个队列,不同层的结点进不同的队列。这样做是为了符合题目要求,题目返回值希望我们把同一层的结点的值放入一个同一个
List 中。
3. 我们维护两个队列,一个新的,一个旧的。新的队列存储的是旧的队列中结点的孩子。旧的队列每出队列一个结点,就把该结点的非空孩子结点压入到新的队列中。这样,待旧队列为空时,新队列已存满孩子结点。此时再把新队列赋值给旧队列。重复循环。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList();
if(root == null)
return list;
LinkedList<TreeNode> oldNode = new LinkedList();
oldNode.add(root);
while(!oldNode.isEmpty()) {
LinkedList<TreeNode> newNode = new LinkedList();
List<Integer> subList = new ArrayList();
while(!oldNode.isEmpty()) {
TreeNode node = oldNode.remove();
subList.add(node.val);
if(node.left != null)
newNode.add(node.left);
if(node.right != null)
newNode.add(node.right);
}
oldNode = newNode;
list.add(subList);
}
return list;
}
}
34 / 34 test cases passed.
Status: Accepted
Runtime: 324 ms