863. All Nodes Distance K in Binary Tree [JavaScript]

本文介绍了一种算法,用于在二叉树中找到所有距离目标节点为K的节点值。通过将二叉树转换为无向图并使用BFS遍历,有效地解决了这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目

  We are given a binary tree (with root node root), a target node, and an integer value K.

  Return a list of the values of all nodes that have a distance K from the target node. The answer can be returned in any order.

二、题目大意

  返回距离目标节点K的所有节点的值列表。

三、解题思路

  将二叉树转化为无向图,然后采用BFS即可。在处理无向图时,记得标记访问过的节点。

四、解题思路
const distanceK = (root, target, K) => {
  
  const graph = {}
  let ans = []

  // 边界条件
  if (!root) {
    return ans
  }
  const tv = target.val
  // 边界条件
  if (K === 0) {
    return [tv]
  }

  // 构建无向图
  buildGraph(null, root)

  ans = graph[tv] || []

  const record = new Set() // 记录访问过的节点

  record.add(tv)

  let step = K

  while (--step && ans.length) {
    const max = ans.length

    for (let i = 0; i < max; i++) {
      const item = ans.pop()
      record.add(item)
      const sub = graph[item]
      for (let j = 0; j < sub.length; j++) {
        const x = sub[j]
        if (!record.has(x)) {
          ans.unshift(x)
          record.add(x)
        }
      }
    }
  }

  return ans


  return ans
  function buildGraph (parent, child) {
    if (parent && child) {
      const pv = parent.val
      const cv = child.val
      if (!graph[pv]) {
        graph[pv] = []
      }
      if (!graph[cv]) {
        graph[cv] = []
      }
      graph[pv].push(cv)
      graph[cv].push(pv)
    }

    if (child.left) {
      buildGraph(child, child.left)
    }
    if (child.right) {
      buildGraph(child, child.right)
    }
  }
}

  如果本文对您有帮助,欢迎关注微信公众号,为您推送更多大前端相关的内容, 欢迎留言讨论,ε=ε=ε=┏(゜ロ゜;)┛。

  您还可以在这些地方找到我:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值