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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手算法学习之路----宽度优先算法相关的知识,希望对你有一定的参考价值。

题目:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

给一棵二叉树 {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;
    }

 

以上是关于新手算法学习之路----宽度优先算法的主要内容,如果未能解决你的问题,请参考以下文章

新手算法学习之路----二叉树(二叉树最大路径和)

新手算法学习之路----二分法SmallestRectangle

新手算法学习之路----二分法Search-A-2D-Matrix

深度优先算法 和 宽度优先算法 的优缺点

新手算法学习之路----二分法Maximum-in-Mountain-Sequence

新手算法学习之路----二分法Search-for-a-Range