20191218——关于BFS与DFS 广度与深度优先遍历
程序员文章站
2022-05-22 10:06:27
...
二叉树是计算机中重要的数据结构,这里主要说一下二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)
所谓DFS,就是沿着树的深度一直往下,一直到达一个节点,然后返回剩余遍历的节点。根据树的性质,树结构不存在环,因此遍历的时候不需要标记,如果在遍历一个图的时候,因为图中有环存在,因此需要标记访问过的节点,以防止程序进入死循环,言归正传,树的DFS有三种,分别为前序遍历,中序遍历,后续遍历。根据这个性质,我们很容易想到用堆栈来完成DFS。遍历的时候我们需要将元素压入栈,然后利用堆栈先进后出的性质来实现不同的遍历。
所谓前序遍历,就是每次都先访问根节点,然后依次为左子树,和右子树。根据前序遍历的规定,左子树先于右子树,依次压栈的时候从右子树开始。代码如下
这是树的数据结构
public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
这是树的操作。
public List<Integer> preorderTraversal(TreeNode root){
//创建一个list来存放遍历的元素
List<Integer> list = new ArrayList<Integer>();
//创建一个栈来实现前序遍历
Stack<TreeNode> stack = new Stack<TreeNode>();
//判断root 为null直接返回0
if(root == null){
return 0;
}
//根放入堆栈中
stack.push(root);
while(!stack.isEmpty()){
TreeNode node =stack.pop();
list.add(node.val);
if(node.right !=null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
}
return list;
}
推荐阅读
-
PHP实现二叉树的深度优先与广度优先遍历方法
-
数据结构与算法-----BFS与DFS(广度优先搜索与深度优先搜索)
-
数据结构与算法_深度优先搜索(DFS)与广度优先搜索(BFS)详解
-
Java数据结构与算法:图、图的概念、深度优先搜索DFS、广度优先搜索BFS、思路分析、代码实现
-
【数据结构】图的遍历——深度优先搜索DFS、广度优先搜索BFS
-
数据结构与算法————图的遍历DFS深度优先搜索和BFS广度优先搜索
-
java数据结构与算法之二叉树深度优先和广度优先遍历
-
JavaScript实现树的遍历算法示例【广度优先与深度优先】
-
数据结构与算法(Java描述)-20、图、图的邻接矩阵、有向图的广度优先遍历与深度优先遍历
-
dfs(深度优先搜索)与bfs(宽度/广度优先搜索)