广度优先搜刮(也称宽度优先搜刮,缩写BFS即即Breadth First Search)是连通图的一种遍历算法。这一算法也是许多紧张的图的算法的原型。Dijkstra单源最短路径算法和Prim最小天生树算法都采取了和广度优先搜刮类似的头脑。其属于一种盲目征采法,目标是体系地睁开并检查图中的全部节点,以找寻效果。换句话说,它并不思量效果的可能位置,彻底地搜刮整张图,直到找到效果为止。根本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。
所采取的战略可概况为越早被访问到的顶点,其邻人顶点越早被访问。于是,从根顶点s的BFS搜刮,将起首访问顶点s;再依次访问s全部尚未访问到的邻人;再按后者被访问的先后序次,逐个访问它们的邻人。一样平常用队列queue数据布局来辅助实现BFS算法。
二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问全部节点)。
class Solution { /** * 思绪:用队列存储每一层的数字,然后用变量记载当前层级元素的个数 * 创建当前层级聚集,遍历当前层级的size,弹出当列当前数添加到聚集,判定当前节点左右节点是否为空,不为空加入到当前队列中 * 注:每一层取当前层是从队列取前面数,存下一层是放入队列尾部,以是不会有辩论 * @param root * @return */ public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); Queue<TreeNode> queue = new ArrayDeque<>(); if (root != null) { queue.add(root); } while(!queue.isEmpty()) { //如果当前队列不为空,将当前队列的当前层弹出队列,存储数组中 int size = queue.size(); List<Integer> curLevel = new ArrayList<>(); for (int i=0;i<size;i++) { //当前层级可以继承弹出 TreeNode node = queue.poll(); curLevel.add(node.val); if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } res.add(curLevel); } return res; }}深度优先搜刮
深度优先搜刮属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜刮是图论中的经典算法,使用深度优先搜刮算法可以产生目标图的相应拓扑排序表,使用拓扑排序表可以方便的办理许多相干的图论问题,如最大路径问题等等。一样平常用栈stack数据布局来辅助实现DFS算法。其过程扼要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
二叉树的最大深度