二叉树 Leetcode 590 后序遍历二叉树
2019-07-14 本文已影响0人
禾木清清
题目
给定一个 N 叉树,返回其节点值的后序遍历。
例如,给定一个 3叉树 :
返回其后序遍历: [5,6,3,2,4,1].
说明: 递归法很简单,你可以使用迭代法完成此题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
递归的方法 1044ms
递归的遍历子节点,放到数组里面,最后加入跟节点
代码
"""
# 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]
"""
res = []
if not root:
return res
for child in root.children:
res.extend(self.postorder(child))
res.append(root.val)
return res
迭代的方法 1036ms
使用栈保存节点:
- 先保存跟节点
- 弹出第一个节点,把子节点放入
- 输出跟节点
- 这样保存的数组是前序遍历,要把数组倒置得到后续遍历
"""
# 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]
"""
res = []
if not root:
return res
stack = [root]
while stack:
node = stack.pop()
stack.extend(node.children)
res.append(node.val)
return res[::-1]