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

📅  最后修改于: 2023-12-03 15:10:00.994000             🧑  作者: Mango

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

N 叉树是每个节点有多个子节点的树结构,打印 N 叉树的所有根到叶路径可以使用深度优先搜索(DFS)算法来实现。

算法步骤

首先我们需要定义一个递归函数 dfs(node, current_path),其中 node 表示当前节点,current_path 表示当前路径。如果该节点为叶子节点,就将当前路径加入结果列表中。否则,遍历该节点的每个子节点,对每个子节点递归调用 dfs() 函数,将 current_path 加上当前节点值。

代码实现

下面是 Python 语言实现的代码:

class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children

class Solution:
    def dfs(self, node, current_path, result):
        if not node.children:
            result.append(current_path + [node.val])
        else:
            for child in node.children:
                self.dfs(child, current_path + [node.val], result)

    def print_paths(self, root):
        if not root:
            return []
        result = []
        self.dfs(root, [], result)
        return result
示例

下面是一个 N 叉树结构的示例:

        1
      / | \
     2  3  4
    / \
   5   6

我们可以使用以下代码来生成该 N 叉树:

n5 = Node(val=5)
n6 = Node(val=6)
n2 = Node(val=2, children=[n5, n6])
n3 = Node(val=3)
n4 = Node(val=4)
root = Node(val=1, children=[n2, n3, n4])

然后调用 print_paths() 函数即可打印所有根到叶路径:

>>> s = Solution()
>>> paths = s.print_paths(root)
>>> for path in paths:
...     print(path)
...
[1, 2, 5]
[1, 2, 6]
[1, 3]
[1, 4]