码迷,mamicode.com
首页 > 编程语言 > 详细

新手算法学习之路----宽度优先算法

时间:2017-07-28 22:20:57      阅读:197      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!