在一个JSON多叉树中,查找指定节点的根结点路径。
Json数据的树形结构的特征是,id是全局唯一的。当然,这是用来标识唯一节点的,必须是唯一的。
示例数据如下:
{
"id": 1,
"name": "一",
"children": [
{
"id": 2,
"name": "二",
"children": [
{
"id": 6,
"name": "六"
},
{
"id": 7,
"name": "七",
"children": [
{
"id": 11,
"name": "十一"
},
{
"id": 12,
"name": "十二"
}
]
},
{
"id": 8,
"name": "八"
}
]
},
{
"id": 3,
"name": "三"
},
{
"id": 4,
"name": "四",
"children": [
{
"id": 9,
"name": "九"
},
{
"id": 10,
"name": "十"
}
]
},
{
"id": 5,
"name": "五"
}
]
}
Python
def get_node_path(tree, id, path):
"""获取指定节点路径.
Parameters
----------
tree : List
Json树组成的数组.
id : Int
数据id.
path : List
一个空数组,用来存储节点路径.
Returns
-------
List
代表节点路径的数组.
"""
for node in tree:
path.append(node['name'])
if node['id'] == id:
return path
if 'children' in node.keys():
result = get_node_path(node['children'], id, path)
if result:
return result
path.pop()
return None
JavaScript
function getNodePath(data, id, array) {
var arr = Array.from(array);
for (var i = 0; i < data.length; i++) {
arr.push(data[i].id);
if (data[i].id == id) {
return arr;
}
var children = data[i].children;
if (children && children.length) {
var result = getNodePath(children, id, arr);
if (result) return result;
}
arr.pop();
}
return false;