zoukankan      html  css  js  c++  java
  • 二叉树相关编程题总结

    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))
  • 相关阅读:
    Java设计模式之责任链模式
    多线程几个常用方法的实例
    Activiti工作流
    Java线程常用方法汇总
    Java线程的几个概念
    多线程——实现Callable接口
    java对象在JVM堆中的数据结构
    对计算机世界的认知
    wait、notify为什么要放在同步代码块中
    java synchronized关键字的底层实现
  • 原文地址:https://www.cnblogs.com/weswes/p/12078860.html
Copyright © 2011-2022 走看看