深度优先搜索 DFS(DFS主要应用:二叉树搜索和图搜索,回溯法=DFS+剪枝)
关于DFS深度优先遍历,我们可以使用递归法(用栈来代替整个递归的过程)或者迭代法。但我们这里默认DFS是用递归的结构实现的,深度优先搜索和回溯法的区别就是:DFS每次都是一个分支走到底,不撞南墙不回头的地步,搜索完这个分支后再去搜索另一个分支。而回溯法是只要碰到满足条件的就回头了。
常见的DFS:先序遍历、中序遍历、后序遍历
DFS模板: 二叉树的深度优先遍历(DFS: 前序遍历/中序遍历/后序遍历)
对于前序、中序和后序遍历,只需将递归函数里的 res.append(root.val) 放在 不同位置 即可,然后调用这个递归函数就可以了,代码完全一样。
1.前序遍历
2.中序遍历
3.后序遍历
二叉树的深度优先遍历迭代法可参见:图解 二叉树的四种遍历