遍历DOM(深度优先、广度优先)

234 阅读1分钟
// 深度优先--递归
function deepTraversal1(node, nodes = []) {
  if (node) {
    nodes.push(node)
    const children = node.children
    for (let i = 0; i < children.length; i++) {
      deepTraversal1(children[i], nodes)
    }
  }

  return nodes
}

// 深度优先--非递归
function deepTraversal2(node) {
  const nodes = []
  const stack = []
  if (node) {
    stack.push(node)
    while(stack.length) {
      const item = stack.pop()
      const children = item.children

      nodes.push(item)

      for (let i = children.length - 1; i >=0 ; i--) {
        stack.push(children[i])
      }
    }
  }

  return nodes
}

// 广度优先
function breadthTraversal(node) {
  const nodes = []
  const stack = []

  if (node) {
    stack.push(node)
    while(stack.length) {
      const item = stack.shift()
      const children = item.children

      nodes.push(item)
      for (let i = 0; i < children.length; i++) {
        stack.push(children[i])
      }
    }
  }

  return nodes
}