N叉树可以看作是每个节点可以有多个孩子节点的树结构。而前序遍历是二叉树遍历的一种方式,先访问根节点,然后递归地前序遍历根节点的每个子树。那么如何实现N叉树的前序遍历呢?

## 方法一:递归实现

实现N叉树的前序遍历的一种简单方式是使用递归。我们可以定义一个辅助函数,该函数用于遍历给定的N叉树。在辅助函数中,我们首先访问当前节点,然后递归地遍历当前节点的每个子节点。

1. 首先,我们检查当前节点是否为空。如果为空,则直接返回。
2. 然后,我们访问当前节点,并将其值添加到结果列表中。
3. 遍历当前节点的每个子节点,对每个子节点递归调用辅助函数。

下面是使用递归方式实现N叉树的前序遍历的示例代码:

def preorder(root):
    if root is None:
        return []
    
    result = [root.val]
    for child in root.children:
        result.extend(preorder(child))
    
    return result

## 方法二:迭代实现

除了递归方式,我们还可以使用迭代的方式实现N叉树的前序遍历。我们可以使用栈来保存待访问的节点。具体步骤如下:

1. 首先,我们创建一个空栈,并将根节点入栈。
2. 当栈不为空时,进行循环:
1. 弹出栈顶节点,并访问它的值,将其添加到结果列表中。
2. 将当前节点的所有子节点按照逆序依次入栈。

下面是使用迭代方式实现N叉树的前序遍历的示例代码:

def preorder(root):
    if root is None:
        return []
    
    stack = [root]
    result = []
    while stack:
        node = stack.pop()
        result.append(node.val)
        stack.extend(node.children[::-1])
    
    return result

这样,我们通过迭代方式实现了N叉树的前序遍历。

## 总结

N叉树的前序遍历是将根节点放在最前面,然后递归地遍历每个子树。我们可以使用递归或迭代的方式来实现N叉树的前序遍历。递归方式相对简单,但可能会引起栈溢出的问题。而迭代方式则使用栈来保存待访问的节点,避免了递归的调用。无论使用哪种方式,我们都可以按照先根节点,然后递归地遍历每个子树的顺序,实现N叉树的前序遍历。