590. N叉树的后序遍历
给定一个N叉树,返回其节点值的后序遍历。
例如,给定一个 3叉树 :
返回其后序遍历: [5,6,3,2,4,1].
说明: 递归法很简单,你可以使用迭代法完成此题吗?!
递归解法
思路:
- 用栈的结构和递归的方法后续遍历N叉树
- 当根节点为空时,返回空列表
- 当根节点的子节点列表为空时,返回仅存放根节点值的列表
- 当根节点的子节点列表不为空时,逆序遍历子节点列表,将后序遍历子节点的返回列表和当前的列表合并
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution(object):
def postorder(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[::-1]:
result = self.postorder(child) + result
return result
迭代解法
思路:
- 使用辅助栈
- 当根节点为空时,返回空列表,否则将根节点压入栈中
- 栈顶弹出节点,将节点的值插入到返回列表的最前端,然后将弹出节点的子节点按顺序压入栈中
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution(object):
def postorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
if not root:
return []
stack, result = [], []
stack.append(root)
while stack:
curr_node = stack.pop()
result.insert(0, curr_node.val)
for child in curr_node.children:
stack.append(child)
return result

浙公网安备 33010602011771号