三个数组 怎么根据相同的属性值构建成树行结构 并写出代码示例
时间: 2023-08-02 08:11:29 浏览: 74
假设有三个数组,分别为 `idArr`、`nameArr` 和 `parentIdArr`,其中 `idArr` 存储节点的唯一标识符,`nameArr` 存储节点的名称,`parentIdArr` 存储节点的父节点标识符。
我们可以通过遍历 `idArr`,对于每个节点,找到它的父节点,并将它加入到父节点的子节点列表中。如果一个节点没有父节点,那么它就是树的根节点。
下面是示例代码:
```python
class TreeNode:
def __init__(self, id, name):
self.id = id
self.name = name
self.children = []
def build_tree(idArr, nameArr, parentIdArr):
nodes = {}
root = None
# 先创建所有节点
for i in range(len(idArr)):
node = TreeNode(idArr[i], nameArr[i])
nodes[idArr[i]] = node
# 遍历所有节点,将它们插入到父节点的子节点列表中
for i in range(len(idArr)):
parentId = parentIdArr[i]
if parentId == 0: # 没有父节点,说明是根节点
root = nodes[idArr[i]]
else:
parent = nodes[parentId]
parent.children.append(nodes[idArr[i]])
return root
```
其中,`TreeNode` 类表示树的节点,包含节点的唯一标识符、名称和子节点列表。`build_tree` 函数接受三个数组作为参数,返回树的根节点。
我们可以通过以下代码测试一下:
```python
idArr = [1, 2, 3, 4, 5, 6, 7]
nameArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
parentIdArr = [0, 1, 1, 2, 2, 3, 3]
root = build_tree(idArr, nameArr, parentIdArr)
def print_tree(root, depth=0):
print('-' * depth + root.name)
for child in root.children:
print_tree(child, depth + 1)
print_tree(root)
```
输出结果如下:
```
A
-B
--D
--E
-C
--F
--G
```
阅读全文