1 回答
TA贡献1780条经验 获得超1个赞
看这个数据,叶节点应该不少。如果不允许非空父节点的话,每个看得见的父节点下至少会有一个叶节点。所以你是要找第一个叶节点呢,还是要找所有叶节点呢?
这里提供一个找所有叶节点的方法,没用递归,用的广度遍历(相关阅读:使用递归遍历并转换树形数据,这里面也讲了广度)。这里采用 ES2015 的 generator 语法实现
function findLeaves(roots) {
const queue = [...roots];
function* next() {
while (true) {
const node = queue.shift();
if (!node) {
return;
}
if (node.children && node.children.length) {
queue.push(...node.children);
}
yield node;
}
}
return Array.from(next())
// 这里就已经取到了所有的叶节点
.filter(node => !node.isLeaf)
// 这里进一步取到了所有叶节点的 value 值,
// 反正节点都在,想要什么值都可以取得到了
.map(node => node.value);
}
添加回答
举报