题目要求:输入二叉树的前序遍历和中序遍历,构建二叉树,返回根节点
我的思路:前序遍历的特点就是先访问根节点,所以由此可以先找到根,然后在中序遍历中找到根的位置,将中序列表分为左右两部分,递归一直寻找根节点返回。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
#边界条件,没有元素,只有一个元素,?构建不成二叉树
if len(preorder) == 0:
return None
elif len(preorder) == 1 :
return TreeNode(preorder[0])
if len(inorder) == 1: #递归终止条件
return TreeNode(inorder[0])
#1.先根据前序找到根节点,在中序中找到根节点的左边和右边
root = TreeNode(preorder[0])
i = 0
while i < len(inorder) and inorder[i] != preorder[0]:
i += 1
#2.递归建立树
root.left = Solution().buildTree(preorder[1:i+1], inorder[0:i])
root.right = Solution().buildTree(preorder[i+1:], inorder[i+1:])
return root
注意:递归的参数,两个列表的切片位置,前序列表也是需要切分成两部分。
提交之后发现我的代码效率还是比较低的。。。