前序遍历二叉树的要点就是根左右
在这里遍历的是n叉树,因此先访问根节点,然后再遍历根节点的每个孩子就可以了
递归解法
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def preorder(self, root: 'Node') -> List[int]:
res = []
def dfs(root):
if root is None:
return
res.append(root.val)
for ch in root.children:
dfs(ch)
dfs(root)
return res
迭代解法
采用栈来解决,先访问根节点,然后将根节点的孩子倒序入栈,再判断每个孩子是否是根节点,是的话重复上面的操作
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def preorder(self, root: 'Node') -> List[int]:
stack, ans = [root], []
while stack:
node = stack.pop()
if node:
ans.append(node.val)
for child in node.children[::-1]:
stack.append(child)
return ans