LintCode 二叉树层级遍历
解题思路:队列(先进先出)
将每层的节点插入到队列中, 然后遍历队列,再将下一层级的节点插入到队列中, 直到最后
如图中二叉树

image
先将根节点放入队列中如下图

image
然后遍历队列,循环取出队头元素,再将队元元素的左右节点放入到队列中,如下图

image
如此循环直到二叉树最深层级
代码如下:
public List> levelOrder(TreeNode root) {
Queue queue = new LinkedList();
List> tree = new ArrayList>();
if(root == null)
return tree;
queue.offer(root);
while(!queue.isEmpty()){
ArrayList list = new ArrayList();
int size = queue.size();
for(int i=0;i
TreeNode head = queue.poll();
list.add(head.val);
if(head.left!=null){
queue.offer(head.left);
}
if(head.right!=null){
queue.offer(head.right);
}
}
tree.add(list);
}
return tree;
}
|