美文网首页
二叉树 Leetcode 590 后序遍历二叉树

二叉树 Leetcode 590 后序遍历二叉树

作者: 禾木清清 | 来源:发表于2019-07-14 08:50 被阅读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]
            
            
    

    相关文章

      网友评论

          本文标题:二叉树 Leetcode 590 后序遍历二叉树

          本文链接:https://www.haomeiwen.com/subject/ysxbkctx.html