返回

N叉树前序遍历的Python实现和技巧

前端

**N叉树的前序遍历** 

N叉树是一种特殊的树状结构,每个节点可以拥有任意数量的子节点。前序遍历是一种树的遍历方式,它首先访问根节点,然后访问根节点的所有子节点,最后再访问根节点的子节点的子节点,以此类推。

**Python实现** 

**1. 递归方法** 

```python
def preorder_traversal_recursive(root):
  """
  Perform a preorder traversal of an n-ary tree using recursion.

  Args:
    root: The root node of the tree.

  Returns:
    A list of the values of the nodes in the tree in preorder.
  """

  if root is None:
    return []

  result = [root.val]
  for child in root.children:
    result += preorder_traversal_recursive(child)

  return result
```

**2. 迭代方法** 

```python
def preorder_traversal_iterative(root):
  """
  Perform a preorder traversal of an n-ary tree using iteration.

  Args:
    root: The root node of the tree.

  Returns:
    A list of the values of the nodes in the tree in preorder.
  """

  if root is None:
    return []

  stack = [root]
  result = []

  while stack:
    node = stack.pop()
    result.append(node.val)
    for child in node.children[::-1]:
      stack.append(child)

  return result
```

**时间复杂度和空间复杂度** 

递归方法和迭代方法的时间复杂度都是O(n),其中n是树中的节点数。这是因为这两种方法都需要访问树中的每个节点一次。

递归方法的空间复杂度为O(h),其中h是树的高度。这是因为递归调用可能会在栈中堆叠多达h个函数调用。

迭代方法的空间复杂度为O(w),其中w是树的最大宽度。这是因为迭代方法使用栈来存储要访问的节点,并且栈的最大大小可以是w。

**总结** 

递归方法和迭代方法都是遍历N叉树的有效方法。递归方法更易于理解,而迭代方法更有效率。在实践中,您应该根据您的具体需求来选择使用哪种方法。