1. 题目
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
提示:
1 <= inorder.length <= 3000
postorder.length == inorder.length
-3000 <= inorder[i], postorder[i] <= 3000
inorder 和 postorder 都由 不同 的值组成
postorder 中每一个值都在 inorder 中
inorder 保证是树的中序遍历
postorder 保证是树的后序遍历
![在这里插入图片描述](https://img-blog.csdnimg.cn/faa62dea5d2c4682b007ef474c269280.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6auY5Y6L6ZSFXzEyMjA=,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
2. 题解
from typing import List
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
if not inorder and not postorder:
return None
root_val = postorder[len(postorder) - 1]
root = TreeNode(root_val)
i = inorder.index(root_val)
root.left = self.buildTree(inorder[: i], postorder[: i])
root.right = self.buildTree(inorder[i + 1:], postorder[i: -1])
return root