根据末节点找到指定路径

在业务开发中,经常会遇到级联的数据结构,比如省市区、公司组织架构等; 如下图中的树形结构,现在要找出

数据结构定义如下

1
2
3
4
interface Node {
value: any;
children?: Node[];
}

递归实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

function findPath(node, v) {
function walk(node, path = []) {
if (!node) {
return path;
}
let { children, value } = node;
if (children && children.length) {
let len = children.length;
for (let i = 0; i < len; i++) {
let n = children[i];
walk(n, path.slice(0));
}
} else {
path.push(value);
if (value === v) {
return path;
}
}
}

}