Python 使用继承返回树列表
树(如继承树)是一种数据结构 具有父节点和子节点。比如说Python 使用继承返回树列表,python,inheritance,tree,Python,Inheritance,Tree,树(如继承树)是一种数据结构 具有父节点和子节点。比如说 A / | B C / | | D E F 我们将把树表示为一个以节点名为键的字典,并且 子名称和值的列表 {"A":["B", "C"], "B":["D","E"], "C":["F"], "D":[], "E":[], "F":[]} 考虑每个有序列表,并使用递归遍历该列
A
/ |
B C
/ | |
D E F
我们将把树表示为一个以节点名为键的字典,并且
子名称和值的列表
{"A":["B", "C"], "B":["D","E"], "C":["F"], "D":[], "E":[], "F":[]}
考虑每个有序列表,并使用递归遍历该列表
“深度优先”
在深度优先遍历期间,按访问顺序返回一串字母。
对于本例,系统应返回“ABDECF”
我非常理解继承,我只是不明白在这种情况下我应该如何处理它。任何帮助都将不胜感激
class Program4:
def __init__(self):
self.counter=0
def traverse(self, parent, tree):
self.counter += 1 # Leave this counter alone
#@todo - fix this.
# call recursion with self since instance method
# This is doable in no more than six lines of code
pass
if __name__ == "__main__":
tree = {"A":["B", "C"], "B":["D","E"], "C":["F"], "D":[], "E":[], "F":[]}
print("Tree:",tree)
p=Program4()
print("Depth first:",p.traverse("A",tree))
类似于以下内容的操作即可:
class Program4:
# ...
def traverse(self, parent, tree):
# ...
s = parent
for child in tree.get(parent, []):
s += self.traverse(child, tree)
return s
基本情况是一个没有子节点的叶节点,在这种情况下(您可以验证),将返回父节点本身。在所有其他情况下,父级子树的遍历都会附加到父级子树上
您可以使用str.join
和生成器在一行程序中完成此操作:
# ...
def traverse(self, parent, tree):
return parent + ''.join(self.traverse(c, tree) for c in tree.get(parent, []))
>>> p = Program4()
>>> print("Depth first:", p.traverse("A", tree))
Depth first: ABDECF
您是否尝试过执行
遍历
?下面是对您正在寻找的算法的高级解释:
# ...
def traverse(self, parent, tree):
return parent + ''.join(self.traverse(c, tree) for c in tree.get(parent, []))
>>> p = Program4()
>>> print("Depth first:", p.traverse("A", tree))
Depth first: ABDECF