根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
![](https://i-blog.csdnimg.cn/blog_migrate/2b4dc3d2cfc5b109dc98a63907f4dfb6.png)
解题思路
前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中序遍历结果,右部分为树的右子树中序遍历的结果。
![](https://i-blog.csdnimg.cn/blog_migrate/64775e45af944738aaef7a141c21e12d.gif)
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
if not pre or not tin:
return None
# 前序遍历的第0个元素为根节点
root = TreeNode(pre[0])
# 找到中序队列中根节点的下标
i = tin.index(pre[0])
# [1:i+1]不包含索引为i+1的元素
root.left = self.reConstructBinaryTree(pre[1:i + 1], tin[:i])
root.right = self.reConstructBinaryTree(pre[i + 1:], tin[i + 1:])
return root