【问题标题】:How to compute the distance between a leaf and the root node in a tree structure如何计算树结构中叶子和根节点之间的距离
【发布时间】:2020-06-11 21:33:25
【问题描述】:

我正在尝试创建一个树形结构。但我不知道如何使用递归方法。

我正在加载一个包含信息和子项的数组。

我想知道的是,一个节点离根有多远?

例如:

  • id 为 1 的元素距离根 0 步
  • id 为 12 的元素距离根 1 步
  • id 为 122 的元素距离根 2 步
  • id 为 13 的元素距离根 1 步
const data = [
    {id: 1, title: 'foo', children: [
        {id: 11, parentId: 1, title: 'bar',},
        {id: 12, parentId: 1, title: 'baz', children: [
            {id: 121, parentId: 12, title: 'qux'},
            {id: 122, parentId: 12, title: 'quz'}
        ]},
        {id: 13, parentId: 1, title: 'corge'}
    ]}
];

【问题讨论】:

  • “树组件”是什么意思?
  • 您是要查找特定id 的深度,还是一次性查找每个id 的深度?

标签: javascript tree


【解决方案1】:

您可以为此编写递归方法:

const data = [
  {id: 1, title: 'foo', children: [
    {id: 11, parentId: 1, title: 'bar'},
    {id: 12, parentId: 1, title: 'baz', children: [
      {id: 121, parentId: 12, title: 'qux'},
      {id: 122, parentId: 12, title: 'quz'}
    ]},
    {id: 13, parentId: 1, title: 'corge'}
  ]}
];

function findDistance(data, id) {
  for(const elem of data){
    if(elem.id === id) return 0
    if(!elem.children) continue
    const value = findDistance(elem.children, id)
    if(!Number.isNaN(value)) return value + 1
  }
  //Not found, return NaN
  return NaN
}

console.log(findDistance(data, 1))   //0
console.log(findDistance(data, 12))  //1
console.log(findDistance(data, 122)) //2
console.log(findDistance(data, 13))  //1
console.log(findDistance(data, 0))   //Not found, NaN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多