589. N叉树的前序遍历
给定一个N叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :

返回其前序遍历: [1,3,5,6,2,4]。
说明: 递归法很简单,你可以使用迭代法完成此题吗?
递归解法
思路:
- 判断根节点为空的情况,返回[]
- 判断子节点为空的情况,返回根节点的值
- 子节点不为空的情况,先遍历根节点,再前序遍历第一个子节点,第二个子节点,依次进行
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution(object):
def preorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
if not root:
return []
if not root.children:
return [root.val]
result = [root.val]
for child in root.children:
result += self.preorder(child)
return result
迭代解法
思路:
- 根节点为空时,返回[]
- 采用栈的结构,存入根节点
- 弹出根节点,并将值存入到返回列表中,考虑到前序遍历时会先遍历第一个子节点的子树,将根节点的所有子节点逆序后压到栈中
- 后续每次弹出一个节点,都依照第三步操作
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution(object):
def preorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
if not root:
return []
stack = []
result = []
stack.append(root)
while stack:
curr_node = stack.pop()
result.append(curr_node.val)
if curr_node.children:
stack.extend(curr_node.children[::-1])
return result

浙公网安备 33010602011771号