新手算法学习之路----宽度优先算法
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