多路树木和结构

时间:2016-12-11 01:39:25

标签: python data-structures multiway-tree

我在应用数学方面存在一个问题,几乎可以很好地映射到在多路树中找到最长的路径。

我有一个函数child(),它给出了子节点(满足条件的空间中的点)。唯一需要注意的是,child()需要连接到它的所有先前节点,包括根节点。我正在努力以递归方式编写代码。到目前为止,我有类似下面的内容。

def multitree(node):
     tmp_list = child(node)
     for child2 in tmp_list:
           if len(child(child2)))==0:       #if you hit a leaf (dead end), go to next element
                 continue
           else:
                 multitree(child2)

但是在这一点上,我不知道该返回什么。我本质上想要映射整个多路树,直到我到达一切叶子。任何想法或提示?谢谢你们。

编辑:

更新1:为了完整起见,我概述了child()所需的输入:https://i.imgur.com/3MkfsYc.png基本上找到由箭头child()标记的节点的子节点需要节点列表根与节点本身之间,即标有红点的节点。

更新2:

我已经写了下面的孩子(节点),我正在研究它 -

def pathwalk(node):

    children = child(node)
    paths = [child(node.append(kid)) for kid in children]

    return paths

2 个答案:

答案 0 :(得分:1)

你可以做这样的事情来获得最长的路径。在这里,它为您提供了一个节点列表,您可以从中提取任何相关信息:

def longest_path(node):
    children = child(node)

    if not children: # leaf node
        return [node]

    children_vals = [longest_path(c) for c in children]
    longest = max(children_vals, key=len)
    return [node] + longest

不处理关系,或者选择任意选择一个选项。

(注意:半测试)

答案 1 :(得分:0)

我想我已经找到了这个问题。因为我想保留所有节点的运行列表,你找到了孩子们(你跟踪你走的路径,请参阅imgur pic)。我通过添加

编辑了Illuvatar的例程
children_vals = [longest_path(node+[c]) for c in children]

通过这种方式,您可以递归地将每个父级与其子级连接起来。