題目描述
根據(jù)一棵樹的中序遍歷與后序遍歷構(gòu)造二叉樹畸陡。
注意:
你可以假設(shè)樹中沒有重復(fù)的元素。
例如户矢,給出
中序遍歷 inorder = [9,3,15,20,7]
后序遍歷 postorder = [9,15,7,20,3]
返回如下的二叉樹:
3
/ \
9 20
/ \
15 7
解答方法
方法一:遞歸
思路
image
代碼
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
if len(inorder) == 0:
return None
if len(inorder) == 1:
# 這里要返回結(jié)點缀去,而不是返回具體的數(shù)
return TreeNode(inorder[0])
# 后序遍歷的最后一個結(jié)點就是根結(jié)點
root = TreeNode(postorder[-1])
# 在中序遍歷中找到根結(jié)點的索引,得到左右子樹的一個劃分
i = inorder.index(postorder[-1])
# 這里的列表切片使用的是復(fù)制值锰茉,使用了一些空間,因此空間復(fù)雜度是 O(N)
root.left = self.buildTree(inorder[:i], postorder[:i])
root.right = self.buildTree(inorder[i+1:], postorder[i:-1])
return root