深度优先搜索可以说是一条路走到头,形象说是不撞南墙不回头 ,撞了南墙就回头的思想,所以说重点就在不撞南墙继续走的过程和南墙的位置;
以下是我对深度搜索的理解:
深度优先搜索也就是对递归的应用:
例如:对一棵二叉树的搜索
(也有点和二叉树的先序遍历一样)
先对根结点的左孩子进行搜索,进入左孩子结点,然后判断该结点是否有左孩子,如果有则继续进入左孩子,否则再判断是否有右孩子,如果有则进入右孩子再判断左孩 子,直到左孩子和右孩子都为空则返回父结点,返回父结点后判断父结点的右孩子。
下面是实现深度搜索的伪代码:(建议画一颗二叉树边读代码边一步一步走)
int shendu(结点)
{
if(结点为空) //这里意思是先进入结点然后判断是否存在
return 0;
(这里可以做一些对结点数据的处理工作;比如说判断)
int shendu(结点的左孩子);
int shendu(结点的右孩子);
return 0;
}
很显然这是从一棵树的最左边开始搜索,直到最右边结束;