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] ]
就是个层序遍历,没啥难的。想起CTCI里有一个差不多的题,用了一个BFS的解法,不是用Queue,就实现了一下。这里注意LeetCode要求的返回值是ArrayList<Integer>,不是ArrayList<TreeNode>.
具体做法就是两个ArrayList,current 和 parent。parent是上一层的所有node,对于parent的每一个node,将其左儿子和右儿子都放到current里。每层创建一个新current。
public class Solution {
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<TreeNode>> result = new ArrayList<ArrayList<TreeNode>>();
//the above code generates an array of arrays of TreeNodes, while the problems ask for Integers.
ArrayList<ArrayList<Integer>> trueResult = new ArrayList<ArrayList<Integer>>();
if(root == null)
return trueResult;
ArrayList<TreeNode> current = new ArrayList<TreeNode>();
current.add(root);
while(current.size() > 0){
//add the previous level into the final result
result.add(current);
ArrayList<TreeNode> parent = current;
current = new ArrayList<TreeNode>();
for(TreeNode node: parent){
if(node.left != null)
current.add(node.left);
if(node.right != null)
current.add(node.right);
}
}
for(ArrayList<TreeNode> nodeArr : result){
ArrayList<Integer> intArr = new ArrayList<Integer>();
for(TreeNode node : nodeArr){
intArr.add(node.val);
}
trueResult.add(intArr);
}
return trueResult;
}