【发布时间】:2010-10-21 08:12:07
【问题描述】:
我想实现一个具有固定深度的树结构,即当向叶节点添加子节点时,整个树结构应该“向上移动”。这也意味着多个根可以同时存在。请参见下面的示例: 在本例中,绿色节点在迭代 1 中添加,删除顶部节点(灰色)并使 K=0 和迭代 1 处的两个蓝色节点成为根节点。
我该如何实施?
【问题讨论】:
标签: python data-structures tree
我想实现一个具有固定深度的树结构,即当向叶节点添加子节点时,整个树结构应该“向上移动”。这也意味着多个根可以同时存在。请参见下面的示例: 在本例中,绿色节点在迭代 1 中添加,删除顶部节点(灰色)并使 K=0 和迭代 1 处的两个蓝色节点成为根节点。
我该如何实施?
【问题讨论】:
标签: python data-structures tree
存储每个节点及其父节点的引用。当您将一个节点作为子节点添加到它时,在将其所有子节点中的父节点引用设置为None 后,沿着父节点(从添加到的节点开始)并删除第三个节点。然后将已删除节点的子节点添加到您的树列表中。
class Node(object):
depth = 4
def __init__(self, parent, contents):
self.parent = parent
self.contents = contents
self.children = []
def create_node(trees, parent, contents):
"""Adds a leaf to a specified node in the set of trees.
Note that it has to have access to the container that holds all of the trees so
that it can delete the appropriate parent node and add its children as independent
trees. Passing it in seems a little ugly. The container of trees could be a class
with this as a method or you could use a global list. Or something completely
different. The important thing is that if you don't delete every reference to the
old root, you'll leak memory.
"""
parent.children.append(Node(parent, contents))
i = 0:
L = Node.depth - 1
while i < L:
parent = parent.parent
if not parent:
break
i += 1
else:
for node in parent.children:
node.parent = None
trees.extend(parent.children)
i = trees.find(parent)
del trees[i]
【讨论】: