广度优先搜索

广度优先搜索算法(Breadth-First-Search,缩写为BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。

实现方法

  1. 首先将根节点放入队列中。
  2. 从队列中取出第一个节点,并检验它是否为目标。
    • 如果找到目标,则结束搜索并回传结果。
    • 否则将它所有尚未检验过的直接子节点加入队列中。
  3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜索的目标。结束搜索并回传“找不到目标”。
  4. 重复步骤2。

代码实现

class Node {
  constructor(data) {
    this.data = data
    this.children = []
    this.parent = null
  }

  insertChild(child) {
    this.children.push(child)
    child.setParent(this)
  }

  setParent(parent) {
    this.parent = parent
  }

}

/*构造 tree */

let node0 = new Node(0)
let node1 = new Node(1)
let node2 = new Node(2)
let node3 = new Node('hello')
let node4 = new Node(4)
let node5 = new Node(5)

node0.insertChild(node1)
node0.insertChild(node2)
node1.insertChild(node3)
node1.insertChild(node4)
node2.insertChild(node5)


function bfsSearch(root, value) {
  let list = []
  let target
  list.push(root)
  while(list.length) {
    target = list.shift()
    if(target.data === value) return value
    list.push(...target.children) 
  }

}

console.log(bfsSearch(node0, 'hello'))

results matching ""

    No results matching ""