我有一個帶有屬性資料、父節點和子節點(串列)的根節點。我想使用一種方法將整個樹遞回存盤在字典中。
樹節點類
class treeNode:
is_leaf = True
root = False
def __init__(self,data):
self.data = data
self.parent = None
self.children = []
def __repr__(self):
return f"{self.data}"
def add_child(self,child):
child.parent = self
self.children.append(child)
self.is_leaf = False
def get_parent(self):
if self.parent is not None:
return self.parent
else:
self.root = True
return None
def get_children(self):
if not self.is_leaf:
return self.children
else:
print("This is a leaf")
def set_frequency(self,freq):
self.frequency = freq
##This is the method I want to use
## First input (node) is root
def get_all_tree(self,node):
if node.is_leaf:
children.append(node)
else:
for x in node.get_children():
self.get_all_tree(x)
我該如何實施?
編輯:我想創建一個有點像這樣的字典樹:
{0: [1, {2: [11, 12, 13, 16, {3: [14, 15]}, {4: [41, 42, 43]}]}]}
uj5u.com熱心網友回復:
class treeNode:
...
def get_all_tree(self, node):
if node.is_leaf:
return node
else:
tree = {node: []}
for x in node.get_children():
tree[node].append(x.get_all_tree(x))
return tree
root = treeNode('0')
child1 = treeNode('1')
child2 = treeNode('2')
root.add_child(child1)
root.add_child(child2)
child1_1 = treeNode('1.1')
child1_2 = treeNode('1.2')
child1.add_child(child1_1)
child1.add_child(child1_2)
child1_1_1 = treeNode('1.1.1')
child1_1.add_child(child1_1_1)
print(root.get_all_tree(root))
這回傳 {0: [{1: [{1.1: [1.1.1]}, 1.2]}, 2]}
我相信您的代碼有一些改進,正如您所看到的,添加子項非常乏味。考慮到類被命名,treeNode我相信你也有一個Tree類,我建議在 Tree 類中移動對子類和父類的處理,但在類中保留有關每個節點父/子節點的資訊treeNode。稍后我將嘗試用一個最小的例子回來并解釋它。
到目前為止,您的實施作業做得很好!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/371675.html
下一篇:左結合二叉樹折疊
