889从前序和后序遍历序列构造二叉树

题目: 返回与给定的前序和后序遍历匹配的任何二叉树.pre 和 post 遍历中的值是不同的正整数.

来源: https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/

法一: 官方代码 注意这个题中的答案实际上不唯一

思路: 这里面用了二叉树递归方法中一个很典型的模板,类似于236二叉树的最近公共祖先中做标记的方法,要理解其精髓.

 

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
from typing import List
class Solution(object):
    def constructFromPrePost(self, pre, post):
        if not pre: return None
        root = TreeNode(pre[0])
        # 如果前序只有一个元素了,说明左子树或右子树只有一个元素了,直接返回
        if len(pre) == 1: return root
        # 加一是因为索引是从0开始的,这里计算的是实际长度
        L = post.index(pre[1]) + 1
        # 注意这里是切片操作,每次传过去的都是新的引用
        root.left = self.constructFromPrePost(pre[1:L+1], post[:L])
        root.right = self.constructFromPrePost(pre[L+1:], post[L:-1])
        return root

if __name__ == '__main__':
    duixiang = Solution()
    pre = [1, 2, 4, 8, 9, 5, 10, 3, 6, 7, 11, 13, 14, 12]
    post = [8, 9, 4, 10, 5, 2, 6, 13, 14, 11, 12, 7, 3, 1]
    a = duixiang.constructFromPrePost(pre=pre, post=post)
    print(a)
View Code

你可能感兴趣的:(889从前序和后序遍历序列构造二叉树)