递归树形数据,找到匹配项停止递归
时间: 2023-10-10 09:11:14 浏览: 48
递归树形数据时,可以使用递归函数来遍历整个树形结构。在递归函数中,可以通过判断当前节点是否匹配目标项来决定是否继续递归子节点。如果当前节点匹配目标项,则可以停止递归并返回该节点。
例如,考虑以下树形结构:
```
{
"name": "root",
"children": [
{
"name": "A",
"children": [
{
"name": "B",
"children": []
},
{
"name": "C",
"children": []
}
]
},
{
"name": "D",
"children": [
{
"name": "E",
"children": []
},
{
"name": "F",
"children": []
}
]
}
]
}
```
假设我们要在这个树形结构中查找名为 "C" 的节点。可以使用以下递归函数:
```
def find_node(node, target_name):
if node["name"] == target_name:
return node
for child in node["children"]:
result = find_node(child, target_name)
if result is not None:
return result
return None
```
该函数以当前节点和目标名称作为参数,如果当前节点名称匹配目标名称,则返回该节点。否则,递归遍历每个子节点,并返回子节点中匹配目标名称的节点。如果遍历完整个树形结构都没有找到匹配项,则返回 None。
使用该函数查找名为 "C" 的节点的代码如下:
```
root = {...} # 树形结构
target_name = "C"
result = find_node(root, target_name)
if result is not None:
print("找到了节点:", result)
else:
print("没有找到节点:", target_name)
```
输出:
```
找到了节点: {'name': 'C', 'children': []}
```
在递归函数中,如果当前节点匹配目标项,则返回该节点;如果当前节点不匹配目标项,则继续递归其子节点。如果子节点中找到匹配项,则返回该节点;否则,继续遍历下一个子节点。如果遍历完所有子节点都没有找到匹配项,则返回 None。这样,可以逐层递归整个树形结构,直到找到匹配项为止。