标签:linked array 算法学习 题目 empty sem 检查 eve new
题目:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
给一棵二叉树 {3,9,20,#,#,15,7}
:
3
/ 9 20
/ 15 7
返回他的分层遍历结果:
[ [3], [9,20], [15,7] ]
思路:宽度优先的步骤是,从图中某一个顶点出发,首先访问vi 然后任选一个vi 的未访问的过的邻接点vj,就这样继续访问下去。
java代码:
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { // write your code here ArrayList result = new ArrayList(); if(root == null){ return result; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()){ ArrayList<Integer> g = new ArrayList<Integer>(); int size = queue.size(); for(int i =0; i < size;i++){ //这里如果把size直接写成queue.seize()结果就会成为【1,2】,3;原因是:由于如果使用了queue.size的话,那么在for循环的第二次的时候queue里面已经执行了两次poll操作了,这时候queue的size值就又为二了。作者真是太聪明了,我检查了好久都没有发现 TreeNode head = queue.poll(); g.add(head.val); if(head.left!=null){ queue.offer(head.left); } if(head.right!=null){ queue.offer(head.right); } } result.add(g); } return result; }
标签:linked array 算法学习 题目 empty sem 检查 eve new
原文地址:http://www.cnblogs.com/junliu37/p/7252631.html