1. 深度优先搜索(Depth-First-Search,DFS)

百度百科: 深度优先搜索是一种在开发爬虫早期使用较多的方法。 它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。 在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。 深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。 当不再有其他超链可选择时,说明搜索已经结束。

  • 一般用来遍历树结构
  • 根据词表面意思就能看得出来,对树状结构先遍历到深度(底部),再往回遍历,主要以深度为先,广度(宽度)无所谓
  • 正常有这几种:
    • 前序遍历(PreOrder):先访问当前节点,再依次递归访问左右子节点
    • 中序遍历(InOrder):先递归访问左子节点,再访问当前节点,再递归访问右子节点
    • 后序遍历(PostOrder):先递归访问左右子节点,再访问当前节点
// 递归算法,前序遍历 Node 为根的二叉查找树
func preOrder(n *Node) {
    if n == nil {
        return
    }

    fmt.Println(n.e)
    preOrder(n.left)
    preOrder(n.right)
}

// 递归算法,中序遍历 Node 为根的二叉查找树
func inOrder(n *Node) {
    if n == nil {
        return
    }

    inOrder(n.left)
    fmt.Println(n.e)
    inOrder(n.right)

}

// 递归算法,后序遍历 Node 为根的二叉查找树
func postOrder(n *Node) {
    if n == nil {
        return
    }

    postOrder(n.left)
    postOrder(n.right)
    fmt.Println(n.e)

}

前序遍历 中序遍历 后序遍历

注:中序遍历二叉搜索树可以输出有序的数据序列,时间复杂度是 O(n),非常高效。后序遍历是先遍历左右子节点再遍历本身,内存的释放可以采用后序遍历的方式。

具体用法建议看下文章 树,二叉树,平衡二叉树,红黑树,B树等逐步深入了解

results matching ""

    No results matching ""