您的位置:首页 > 其它

LeetCode刷题笔录 Binary Tree Level Order Traversal

2014-04-22 09:21 441 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: