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
Given binary tree
{3,9,20,#,#,15,7}
,3 / \ 9 20 / \ 15 7return its level order traversal as:
[ [3], [9,20], [15,7] ]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package leetcode.tree; | |
import java.util.ArrayList; | |
import java.util.LinkedList; | |
import java.util.Queue; | |
/** | |
* Thought: Use Queue to store every layer nodes, the most important is to terminate level. we use queue size. | |
* | |
* 1. int queueSize = queue.size(), we cannot put queue.size() in for loop as it will changes in loop. | |
* 2. Queue is just a interface, we use LinkedList as implement class. | |
* 3. Must judge if root == null, or NullPointerProblem in list.add(node.val). return result instead of null -- coding style. | |
* Extension: Except this way, any other ways? | |
* 1. Queue + dummyNode --> insert dummyNode when one line ends. dummyNode has No meaning like Integer.MAX_VALUE | |
* 2. Two Queue --> next time, we stored in another queue, for loop ends until size of current queue size==0. | |
* | |
* Actually, our ways is the best way (use quese size to control line). | |
* | |
* @author jeffwan | |
* @date Feb 12, 2014 | |
*/ | |
public class LevelOrder { | |
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { | |
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); | |
if (root == null) { | |
return result; | |
} | |
Queue<TreeNode> queue = new LinkedList<TreeNode>(); | |
queue.offer(root); | |
while(!queue.isEmpty()) { | |
ArrayList<Integer> level = new ArrayList<Integer>(); | |
int queueSize = queue.size(); | |
for (int i = 0 ; i < queueSize; i++) { | |
TreeNode node = queue.poll(); | |
level.add(node.val); | |
if (node.left != null) { | |
queue.offer(node.left); | |
} | |
if (node.right != null) { | |
queue.offer(node.right); | |
} | |
} | |
result.add(level); | |
} | |
return result; | |
} | |
// TreeNode | |
private class TreeNode { | |
int val; | |
TreeNode left; | |
TreeNode right; | |
TreeNode (int x) { | |
val = x; | |
} | |
} | |
} |
No comments:
Post a Comment