



前序遍历是指:先访问根节点,然后依次递归访问每个子节点。
解题思路
-
递归方法
- 先访问根节点的值。
- 递归遍历其所有子节点。
-
迭代方法(使用栈)
- 使用栈模拟递归过程。
- 先将根节点压入栈中,然后不断取出栈顶元素并访问它的值。
- 将其子节点逆序压入栈中,以确保按照从左到右的顺序访问。
代码实现
方法 1:递归
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children if children is not None else []
def preorder(root):
result = []
def dfs(node):
if not node:
return
result.append(node.val) # 访问根节点
for child in node.children: # 递归访问子节点
dfs(child)
dfs(root)
return result
方法 2:迭代
def preorder(root):
if not root:
return []
result = []
stack = [root]
while stack:
node = stack.pop()
result.append(node.val) # 访问当前节点
stack.extend(reversed(node.children)) # 逆序入栈,保证左孩子先出栈
return result
示例
# 构造 n 叉树
root = Node(1, [
Node(3, [Node(5), Node(6)]),
Node(2),
Node(4)
])
print(preorder(root)) # 输出: [1, 3, 5, 6, 2, 4]
时间复杂度:O(N),其中 N 是节点数,因为每个节点只访问一次。
空间复杂度:
- 递归方法:最坏情况下 O(N)(当树变为链表)。
- 迭代方法:最坏情况下 O(N)(存储栈的节点)。
这样,我们就能高效地实现 n 叉树的前序遍历! 🚀
1016

被折叠的 条评论
为什么被折叠?



