gpt4 book ai didi

javascript - 给定一个级别,如何返回树的所有子节点?

转载 作者:行者123 更新时间:2023-11-28 14:11:24 25 4
gpt4 key购买 nike

假设我有一个像这样的数组

let tree = [
{
id: 8,
level: 1,
children: [
{
id: 3,
level: 2,
children: [
{
id: 1,
level: 3,
children: []
},
{
id: 6,
level: 3,
children: [
{ id: 4, level: 4, children: [] },
{ id: 7, level: 4, children: [] }
]
}
]
},
{
id: 10,
level: 2,
children: [
{
id: 14,
level: 3,
children: [
{ id: 13, level: 4, children: [] }
]
}
]
}
]
}
]

我正在努力让所有 child 都达到给定的水平。因此,在函数中,如果我提供级别 3,我应该得到那里的 child 和 child 的 child (如果有的话)。

这是我到目前为止所拥有的功能。奇怪的是,它只适用于 2 级,但没有其他作用。

function searchTree(node, level){
let resultArr = [];
if(node.children){
node.children.forEach( (n) => {
if(n.level === level){
resultArr.push(n);
}
searchTree(n, n.level);
})
}
return resultArr;
}

最佳答案

您至少有四个错误:

  1. 您没有传递 resultArr,因此它无法累积结果。
  2. 即使您发现 child 的 parent 具有搜索到的级别,您仍然继续查看 child - 这是浪费时间。
  3. 您正在使用节点的级别而不是您正在搜索的级别进行递归调用。
  4. 您的代码不适用于第一级,因为您从不检查顶部节点,只检查其子节点。

尝试这个版本:

function searchTree(node, level, resultArr)
{
if (node)
{
if (node.level === level)
{
resultArr.push(node);
}
else if (node.children)
{
node.children.forEach((n) => {searchTree(n, level, resultArr);})
}
}
}

您也不需要将关卡存储在节点中;您可以在进行递归调用时计算它(如果使用 currentLevel 调用您,只需使用 currentLevel + 1 调用您的子级)。

关于javascript - 给定一个级别,如何返回树的所有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59316577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com