文章目录
二叉树的深度优先遍历
深度优先遍历(DFS)也叫深度优先搜索。它的定义是:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。
虽然说 深度优先遍历是定义在graph 数据结构上的,但是,二叉树本质上也可以看成是一种特殊的graph 。所谓二叉树上的DFS,就是沿着树的根节点,一直向下搜索,直到到达二叉树的叶子节点位置。
二叉树的DFS实现包括递归方式和非递归堆栈方式。
二叉树DFS的应用
二叉树DFS的应用很多,最典型的就是寻找二叉树中所有路径的集合以及其变形。
本文主要关于二叉树寻找路径的应用给予Java 代码实现。
二叉树DFS(递归方式)[Java]
List<Integer> dfs_list = new ArrayList<Integer>();
/**
* 递归方法实现 二叉树的深度优先遍历 DFS
* @param root
*/
public void dfs_recursion(TreeNode root){
if(root == null)
return;
dfs_list.add(root.val);
if(root.left != null)
dfs(root.left);
if(root.right != null)
dfs(root.right);
}
二叉树DFS(非递归堆栈方式)[Java]
/**
* 非递归方法实现 二叉树的深度优先遍历 DFS
* @param root
*/
public void dfs(TreeNode root){
if(root == null)
return;
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while(!stack.isEmpty()){
root = stack.pop();
dfs_list.add(root.val);
if(root.right != null){
stack.push(root.right);
}
if(root.left != null){
stack.push(root.left);
}
}
}
返回二叉树所有路径 [Java]
/**
* 返回所有路径
* 路径 : 从根节点到叶子节点 所经过的节点集合
*/
List<List<Integer>> total_path