105. 从前序与中序遍历序列构造二叉树


class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
self.preindex = 0
# 用字典存储中序序列中root的值与下标
indict = {v: i for i, v in enumerate(inorder)}
root = self.dg(0, len(preorder) - 1, preorder, inorder, indict)
return root

def dg(self, start, end, preorder, inorder, indict):
    if start <= end:
        # 利用字典:index = dict[val]
        rindex = indict[preorder[self.preindex]]
        self.preindex += 1
        root = TreeNode(inorder[rindex])
        root.left = self.dg(start, rindex - 1, preorder, inorder, indict)
        root.right = self.dg(rindex + 1, end, preorder, inorder, indict)
        return root
原文地址:https://www.cnblogs.com/panweiwei/p/13585625.html