【递归】前序遍历和中序遍历树构造二叉树
思路:
从前序遍历序列中可得到根节点,然后从中序遍历中找出左子树和右子树,再对左子树和右子树进行同样的递归操作。
要注意的点:
root的类型为TreeNode类型,而不是整型
Python实现:
""" Definition of TreeNode: class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None """ class Solution: """ @param preorder : A list of integers that preorder traversal of a tree @param inorder : A list of integers that inorder traversal of a tree @return : Root of a tree """ def buildTree(self, preorder, inorder): # write your code here if preorder == [] or inorder == []: return None root = preorder[0] root_pos = inorder.index(root) root = TreeNode(root) left_len = len(inorder[:root_pos]) right_len = len(inorder[root_pos+1:]) root.left = self.buildTree(preorder[1:left_len+1], inorder[:root_pos]) root.right = self.buildTree(preorder[left_len+1:], inorder[root_pos+1:]) return root