从一个多叉树形结构的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": "五"
}
]
}
目前使用的算法如下:
def find_tree(tree, id):
node_list = [] # 初始化列表
node_list.append(tree) # 追加根结点到列表
while node_list: # 遍历列表
node = node_list.pop(0) # 移除并返回第一个元素
if node['id'] == id: # 对照id
return node['name'] # 返回对象的name属性值
if 'children' in node.keys(): # 如果存在子节点,则进行追加操作
for t in node['children']: # 遍历子节点
node_list.append(t) # 追加到列表
算法说明:这个算法通过广度遍历的方法,寻找指定的id。其中利用一个列表依次追加在遍历过程中出现的子节点,然后在循环中不断的移除列表的第一个元素进行id对照,直到找到指定id或者遍历完整个树,循环才会结束。