深度优先(DFS)和广度优先(BFS)

121 阅读1分钟

tree结构

结构抽象图

深度优先.png

代码结构

const tree = {
  val: 'a',
  children: [{
    val: 'b',
    children: [{
      val: 'c',
      children: []
    }, {
      val: 'd',
      children: []
    }]
  }, {
    val: 'e',
    children: [{
      val: 'f',
      children:[]
    }]
  }]
}

深度优先

深度优先顺序抽象图

深度优先.png

深度优先实现(递归)

const depth(root){
    console.log(root.val) //output:"a" "b" "c" "d" "e" "f"
    root.children.forEach(depth)
}
depth(tree)

深度优先遍历是指从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续找它的下一个顶点进行访问。重复此步骤,直至所有结点都被访问完为止。

广度优先

广度优先顺序抽象图

广度优先.png

广度优先实现

const wide(root){
    const arr = [root]
    while(arr.length>0){
        const o = arr.unshift()
        console.log(o.val)
        o.children.forEach(item=>{
            arr.push(item)
        })
    }
}

广度优先遍历是从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点所有未被访问的邻结点,访问完后再访问这些结点中第一个邻结点的所有结点,重复此方法,直到所有结点都被访问完为止。