📌  相关文章
📜  打印N元树的所有根到叶路径(1)

📅  最后修改于: 2023-12-03 14:54:27.356000             🧑  作者: Mango

打印N元树的所有根到叶路径

在计算机科学中,树是一种非常常见的数据结构。N元树是指每个节点最多有N个子节点的树。在本文中,我们将介绍如何打印一个N元树的所有根到叶路径,并为你提供实现这个算法的代码。

算法思路

我们可以使用深度优先搜索(DFS)算法来找到所有根到叶路径。从根节点开始,遍历树的每个节点,并将遍历路径存储到数组中。当遍历到叶节点时,输出数组中存储的遍历路径。

代码实现

以下是用Python语言实现上述算法的代码片段。代码中,我们使用了递归实现DFS算法。

class TreeNode:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children if children else []


class Solution:
    def print_paths(self, root):
        if not root:
            return []

        res = []

        def dfs(node, path):
            if not node.children:
                res.append(path)

            for child in node.children:
                dfs(child, path + [child.val])

        dfs(root, [root.val])
        return res


if __name__ == "__main__":
    root = TreeNode(1, [TreeNode(2, [TreeNode(4), TreeNode(5)]), TreeNode(3, [TreeNode(6)])])
    solution = Solution()
    paths = solution.print_paths(root)
    for path in paths:
        print("->".join(map(str, path)))

以上代码首先定义了一个辅助数据结构TreeNode,它包含一个val属性表示节点值和一个children属性表示该节点的子节点列表。我们还定义了一个Solution类,它包含了实现打印所有根到叶路径的方法print_paths。在这个方法中,我们首先判断root是否为空,如果为空则直接返回空列表。

我们初始化结果数组res,然后实现递归方法dfs,这个方法接收两个参数:当前节点node和已经遍历过的路径path。如果该节点为叶节点,则将path加入到结果数组中,否则,我们依次遍历该节点的每个子节点,并将该子节点加入到当前路径path中。调用递归方法dfs处理子节点。

最后,我们调用dfs方法,并将根节点和根节点值加入到路径列表path中。最终返回结果数组res,并在主函数中输出所有根到叶路径。

以下是打印路径的输出结果:

1->2->4
1->2->5
1->3->6
总结

通过本文的介绍,我们了解了如何使用DFS算法来打印N元树的所有根到叶路径。该算法基于递归实现,易于理解和实现。如果你想要更好地理解和使用算法,建议多实践和运用。