赞
踩
深度优先搜索(DFS,Depth First Search),就是“一条路走到黑”。对每一个可能的分支路径深入到不能再深入为止,当访问某个节点到尽头时,返回上一个还没访问的节点继续进行深度优先搜索。
深度优先搜索常用栈(Stack)这种数据结构配合实现,利用 Stack 先进后出的特点。
广度优先搜索(BFS,Breadth First Search),广度优先是连通图的一种遍历策略。它并不考虑结果的可能位置,而是彻底地搜索整张图,检查图中所有的节点,直到找到结果为止。
广度优先搜索常用队列(queue)这种数据结构配合实现,利用 queue 先进先出的特点。
假设有一棵树,如下图:
利用先进后出的 Stack 来实现,假设从左到右进行搜索遍历,遍历过程如下:
深度优先遍历的结果为:5,2,1,3,4,7,6。
代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public void depthFirst(TreeNode root){ if(root == null) return; LinkedList<TreeNode> stack = new LinkedList<>(); stack.add(root); while(!stack.isEmpty){ TreeNode node = stack.pop(); System.out.print(node.val + ", "); if(node.right != null) stack.add(node.right); if(node.left != null) stack.add(node.left); } }
广度优先遍历即为树的层序遍历,利用先进先出的 queue 来实现。过程如下:
广度优先遍历(层序遍历)的结果为:5,2,7,1,3,6,4。
代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public void breadthFirst(TreeNode root){ if(root == null) return; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty){ TreeNode node = queue.poll(); System.out.print(node.val + ", "); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } }
leetcode刷题(11)——105.从前序与中序遍历序列构造二叉树
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。