在树的节点上添加一个属性来表示该节点的父节点,然后利用递归函数遍历整棵树,将所有节点和其关联的父节点储存在字典中。最后根据某个节点找到它的后代节点列表。
代码示例:
class Node: def init(self, value, parent=None): self.value = value self.parent = parent self.children = []
def add_child(self, node):
self.children.append(node)
node.parent = self
def traverse_tree(self):
# dictionary to store nodes and their corresponding parents
visited = {self: None}
# recursive function to traverse tree
def recursion(node):
for child in node.children:
visited[child] = node
recursion(child)
recursion(self)
# get descendants of a node
def get_descendants(node):
descendants = []
for child in node.children:
if child in visited:
descendants.append(child)
descendants.extend(get_descendants(child))
return descendants
return visited, get_descendants
root = Node(1) node2 = Node(2) node3 = Node(3) node4 = Node(4) node5 = Node(5) node6 = Node(6)
root.add_child(node2) root.add_child(node3) node2.add_child(node4) node2.add_child(node5) node4.add_child(node6)
visited, get_descendants = root.traverse_tree()
for node, parent in visited.items(): print(node.value, parent.value if parent else None)
print([node.value for node in get_descendants(node2)]) # [4, 5, 6]
上一篇:遍历树形结构
下一篇:遍历树状结构的前向和后向方向