原题
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
Return the following binary tree:
3
/
9 20
/
15 7
解法
递归. 利用preorder的第一个元素是它的根节点, inorder的根节点的左边是它的左子树, 右边是它的右子树这一性质. Base case是当inorder为空时, 直接返回, 然后使用分治法递归.
Time: O(n)
Space: O(1)
代码
# 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
"""
# base case
if not inorder:
return
i = inorder.index(preorder.pop(0))
root = TreeNode(inorder[i])
root.left = self.buildTree(preorder, inorder[:i])
root.right = self.buildTree(preorder, inorder[i+1:])
return root
本文介绍了一种通过前序和中序遍历构建二叉树的算法,采用递归方式,利用前序第一个元素为根节点,中序左右划分子树的特性,实现O(n)时间复杂度的解决方案。
3464

被折叠的 条评论
为什么被折叠?



