https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/

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

# -*- coding:utf-8 -*-

# Definition for a binary tree node.
class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
class Solution(object):
    def buildTree(self, preorder, inorder):
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """
        def iter_node(temp_pre_order, temp_in_order):
            if len(temp_in_order) == 0:
                return
            if len(temp_in_order) == 1:
                return TreeNode(temp_pre_order[0])
            root_idx = temp_in_order.index(temp_pre_order[0])
            root = TreeNode(temp_pre_order[0])
            root.left = iter_node(temp_pre_order[1:], temp_in_order[:root_idx])
            root.right = iter_node(temp_pre_order[root_idx + 1:], temp_in_order[root_idx + 1:])
            return root
        root = iter_node(preorder, inorder)
        return root
if __name__ == '__main__':
    preorder = [3, 9, 20, 15, 7]
    inorder = [9, 3, 15, 20, 7]
    # preorder = [1, 2, 3, 4, 5]
    # inorder = [3, 2, 1, 4, 5]
    print(Solution().buildTree(preorder, inorder))

思路:分治的思想,分别计算左右子树直至只有单一结点时返回。

根据前中遍历的思想,首先是根据前序遍历切割中序遍历,然后向下计算子节点。将返回分别链到根节点的左右子树即可。

分类: 算法

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注