• 二叉树相关编程题总结


    1、二叉树后序遍历

    class Solution(object):
        def postorderTraversal(self, root):
            """
            :type root: TreeNode
            :rtype: List[int]
            """
            res = []
            def helper(root):
                if not root:
                    return
                helper(root.left)
                helper(root.right)
                res.append(root.val)
            helper(root)
            return res

    2、从前序与中序遍历序列构造二叉树

    class Solution(object):
        def buildTree(self, preorder, inorder):
            """
            :type preorder: List[int]
            :type inorder: List[int]
            :rtype: TreeNode
            """
            def helper(inc_start, inc_end):
                if inc_start == inc_end:
                    return None
                inc_value = preorder[self.pre_index]
                root = TreeNode(inc_value)
                self.pre_index += 1
                root.left = helper(inc_start, inc_value_map[inc_value])
                root.right = helper(inc_value_map[inc_value] + 1, inc_end)
                return root
            self.pre_index = 0
            inc_value_map = {v: k for k, v in enumerate(inorder)}
            return helper(0, len(inorder))

    3、从后序与中序遍历序列构造二叉树

    class Solution(object):
        def buildTree(self, inorder, postorder):
            """
            :type inorder: List[int]
            :type postorder: List[int]
            :rtype: TreeNode
            """
            def helper(in_start, in_end):
                if in_start == in_end:
                    return None
                val = postorder[self.pos_index]
                root = TreeNode(val)
                self.pos_index -= 1
                root.right = helper(inc_map[val] + 1, in_end) 
                root.left = helper(in_start, inc_map[val])
                return root
            self.pos_index = len(postorder) - 1
            inc_map = {v:k for k,v in enumerate(inorder)}
            return helper(0, len(postorder))
  • 相关阅读:
    暑假第二周总结
    7.18-7.24 第一周周报
    poj 3295 Tautology
    2016多校 #2 1006 Fantasia
    codeforces 698B Fix a Tree
    codeforces 699B Bomb
    HDU 4578(线段树
    CF 600F( 二分图
    hdu 5517 Triple(二维树状数组)
    HDU HDOJ5412(树套树or整体二分
  • 原文地址:https://www.cnblogs.com/weswes/p/12078860.html
Copyright © 2020-2023  润新知