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
posted @ 2018-09-17 14:16  yuyin  阅读(265)  评论(0)    收藏  举报