// 测试数据
let data = [
{
type: "A",
children: [
{
type: "B",
children: [
{
type: "C",
children: [],
},
{
type: "D",
children: [],
},
],
},
{
type: "C",
children: [],
},
{
type: "E",
children: [],
},
],
},
{
type: "F",
children: [
{
type: "C",
children: [],
},
{
type: "H",
children: [],
},
],
},
{
type: "C",
children: [],
},
{
type: "C",
children: [
{
type: "A",
children: [],
},
],
},
];
期望结果:
// 查找type为C的子节点(children为空),结果应返回
[
{
type: "A",
children: [
{
type: "B",
children: [
{
type: "C",
children: [],
},
],
},
{
type: "C",
children: [],
},
],
},
{
type: "F",
children: [
{
type: "C",
children: [],
},
],
},
{
type: "C",
children: [],
},
];
补充
// 这种情况不返回,因为C不是叶子节点
[{
type: "C",
children: [
{
type: "A",
children: [],
},
],
}]
结合边城
用户的文章,最后得出的方法:
function findTreeNode(tree, predicate) {
if (Array.isArray(tree)) {
return filter(tree) ?? [];
} else {
tree.children = filter(tree.children);
return tree;
}
function filter(nodes) {
if (!nodes?.length) {
return nodes;
}
return nodes.filter((it) => {
// 先筛选子树,如果子树中没有符合条件的,children 会是 [] 或 undefined
const children = filter(it.children);
// 根据当前节点情况和子树筛选结果判断是否保留当前节点
if ((predicate(it) && !it.children?.length) || children?.length) {
// 如果要保留,children 应该用筛选出来的那个;不保留的话就不 care 子节点了
it.children = children;
return true;
}
return false;
});
}
}
let data = [
{
type: "A",
children: [
{
type: "B",
children: [
{
type: "C",
children: [],
},
{
type: "D",
children: [],
},
],
},
{
type: "C",
children: [],
},
{
type: "E",
children: [],
},
],
},
{
type: "F",
children: [
{
type: "C",
children: [],
},
{
type: "H",
children: [],
},
],
},
{
type: "C",
children: [],
},
{
type: "C",
children: [
{
type: "A",
children: [],
},
],
},
];
console.log(findTreeNode(data, (item) => item.type === "C"));
看看这个行不
javascript - 过滤/筛选树节点 - 边城客栈 - SegmentFault 思否
我有一个树数据结构,其中每个节点可以有任意数量的子节点,树可以是任何高度的。获取树中所有叶节点的最佳方法是什么?有没有可能比遍历树中的每个路径更好,直到我到达叶节点? 在实践中,树的最大深度通常为 5 左右,树中的每个节点将有大约 10 个子节点。 我对其他类型的数据结构或特殊树持开放态度,这将使获取叶节点特别理想。 我正在使用javascript,但实际上只是在寻找一般建议,任何语言等。 谢啦!
我正在通过为Ruby编写树库来研究树遍历算法。就基本建筑而言,似乎有两个合理的选择; 只有树。树有根值和子树 存在树和节点。一个节点有一个值,子节点。树有根节点和子树。子树的根节点是树的根节点的子节点 其中一种设计更常见吗?在这个库的开发过程中,1)太幼稚或2)不必要的冗余会变得“明显”吗?本图书馆的预期用途为一般用途;我希望它可以用于巨树、二进制搜索树或解析树等。 我能想到其他不那么合理的建筑;
mysql树形结构筛选 mysql版本:5.7 有如下结构: id:主键ID pid:树形结构,标识当前行的父节点ID full_path:当前行在树形结构中的路径,例如当前id为10,父节点为9,那么他的full_path为:9-10 例如在经过某一轮筛选后,有如下数据,或者说某个账号只能看到如下数据 注意ID为100的数据,它的父节点99是存在的,只是业务逻辑中无法得到该节点的数据 现在有如下
树形结构如图 比如说有一个id数组arr=[2,7,8] 根据这个数组获取所有id相同的name,返回一个name数组 树形结构示例如下
问题内容: 表-用户 列-(userId,name,managerId) 行- 如果我提供用户ID,则应列出所有向他报告的人。如果我给userId = 2,则应返回3,4。 这个查询正确吗 有什么有效的方法来管理DB中的树结构吗?左右叶方式怎么样? 问题答案: 在我看来,邻接列表模型的问题在于,在SQL中很难处理它,尤其是当您不知道树结构的嵌套深度时。 您提到的“左右叶方式”可能是嵌套集合模型,它
我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如