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 条评论