深度优先搜索-overview
深度优先搜索的实现一般有2种方式
递归
//todo
非递归-借助stack
因为栈后进先出的特点,使其很容易实现树/图的深度优先遍历。如果是BFS,那非递归经常借助queue。
整个过程可以被描述为:
- 根结点入栈
- 弹出根节点,右节点先入,其次左节点。这样,左节点总是最先被访问到,达到“深”的目的
stack.push(root)
while(stack is not empty):
get top node
stack.pop()
visit top node
stack.push(left node)
stack.push(right node)
借助上图,可以容易理解整个过程。