Binary Tree Level Order Traversal
思路:
把每一层的node放进queue里面。在下次循环的时候把queue头取出来然后再把它的子节点放进queue里面。每一次循环queue里面的节点就是当前level的节点。 进去下一次的循环的时候,queue里面会有可能包含2个level的节点,所以要在内层循环里面加一个上一个level节点数size来控制queue.poll()的次数,也就是在只pop当前层的节点。
实现:
上面说了一堆其实看代码是最清晰的:
把每一层的node放进queue里面。在下次循环的时候把queue头取出来然后再把它的子节点放进queue里面。每一次循环queue里面的节点就是当前level的节点。 进去下一次的循环的时候,queue里面会有可能包含2个level的节点,所以要在内层循环里面加一个上一个level节点数size来控制queue.poll()的次数,也就是在只pop当前层的节点。
实现:
上面说了一堆其实看代码是最清晰的:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/*
* @param root: A Tree
* @return: Level order a list of lists of integer
*/
public List<List<Integer>> levelOrder(TreeNode root) {
// write your code here
List<List<Integer>> result = new ArrayList<>();
if(root == null)
return result;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty())
{
List<Integer> curLvl = new ArrayList<Integer>();
int size = queue.size();
for(int i=0; i < size; i++)
{
TreeNode curNode = queue.poll();
curLvl.add(curNode.val);
if(curNode.left != null)
queue.add(curNode.left);
if(curNode.right != null)
queue.add(curNode.right);
}
result.add(curLvl);
}
return result;
}
}
评论
发表评论