我是编程新手。我正在研究我的树项目
我的树看起来像这样 tree structure
我编写了遍历整个树的代码。目前我的traversel会像这样打印完整的树 A,B,E,F,C,d,G,H,I,J,K
def tree_traversal(self, node):
if(node != None):
print node.name
for child_nodes in node.children:
self.tree_traversal(child_nodes)
但是我想得到这样的输出。
[[A,B,E],[A,B,F],[A,C],[A,D,G,H],[A,D,G,I],[A,D,G,J],[A,D,G,K]]
答案 0 :(得分:3)
您基本上想要从根打印所有路径。您可以通过传递当前路径来递归执行此操作。
基本情况将是遍历命中叶节点,将叶节点连接到路径并打印或执行任何操作。
presudo代码:
def traverse(node, path):
if node is None:
return
if node.left == None and node.right == None:
doStuff(path + node.data)
return
else:
traverse(node.left, path + node.data)
traverse(node.right, path + node.data)
答案 1 :(得分:2)
由于你没有给出任何树/节点类,我用一个来测试:
class Node:
def __init__(self, data, children=None):
if children is None:
children = []
self.data = data
self.children = children
def __str__(self):
return str(self.data)
__repr__ = __str__
从您的图片中提取的树:
tree = Node("A", [
Node("B", [
Node("E"),
Node("F"),
]),
Node("C"),
Node("D", [
Node("G", [
Node("H"),
Node("I"),
Node("J"),
Node("K"),
])
])
])
你想要的是一种能够获得所有可能的根到叶子路径的算法。
def get_all_paths(node, path=None):
paths = []
if path is None:
path = []
path.append(node)
if node.children:
for child in node.children:
paths.extend(get_all_paths(child, path[:]))
else:
paths.append(path)
return paths
测试它会产生您希望的输出:
paths = get_all_paths(tree)
print(paths)
# Prints:
# [[A, B, E], [A, B, F], [A, C], [A, D, G, H], [A, D, G, I], [A, D, G, J], [A, D, G, K]]
但请注意,[A,B,E,F]
不是有效路径,因为F
不是E
的孩子。所以我认为这是一个错误。