【发布时间】:2015-04-28 23:50:40
【问题描述】:
我需要迭代树/图并产生一定的输出,但遵循一些规则:
_ d
/ / \
b c _e
/ / |
a f g
预期的输出应该是(顺序无关):
{'bde', 'bcde', 'abde', 'abcde', 'bdfe', 'bdfge', 'abdfe', ...}
规则是:
- “bde”树的顶部 (leftmost_root_children+root+rightmost_root_children) 应始终存在
- 应保留左右顺序,例如不允许使用“cb”或“gf”组合。
- 所有路径都遵循从左到右的方向。
我需要找到所有遵循这些规则的路径。不幸的是我没有CS背景,我的脑袋快爆炸了。任何提示都会有所帮助。
编辑:这个结构非常接近地代表了我的树:
class N():
"""Node"""
def __init__(self, name, lefts, rights):
self.name = name
self.lefts = lefts
self.rights = rights
tree = N('d', [N('b', [N('a', [], [])], []), N('c', [], [])],
[N('e', [N('f', [], []), N('g', [], [])],
[])])
或者可能更具可读性:
N('d', lefts =[N('b', lefts=[N('a', [], [])], rights=[]), N('c', [], [])],
rights=[N('e', lefts=[N('f', [], []), N('g', [], [])], rights=[])])
【问题讨论】:
-
展示你的尝试!
-
说实话我不知道如何开始。我在想一个双循环,但我觉得我需要做一些递归。我就是不能把所有东西放在一起。
-
d 和 f/g 或 b 和 c 之间没有直接路由。很难发现预期输出背后的逻辑(为什么以及何时从 d 跳到 g,然后跳到 f 再回到 e)。
-
树的开始格式是什么?
-
你说是二叉树,但是d好像有3个孩子?这个例子是错误的,还是不是二进制的?