由於後序遍歷時最後節點是根節點,接着是右子樹的根節點,一直往下。。。
# 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, inorder: List[int], postorder: List[int]) -> TreeNode:
if postorder.__len__() == 0 or inorder.__len__() == 0:
return
center = postorder[-1]
inorderCenterIndex = inorder.index(center)
root = TreeNode(center)
left = inorder[:inorderCenterIndex] #構造當前根節點左子樹
right = inorder[inorderCenterIndex + 1:] #構造當前根節點右子樹
postorder.pop() #將當前根節點從postorder中彈出
if len(right) == 1: #先構建右子樹,再左子樹,碰到只有一個葉子的位置直接添加再刪除postorder中的最後一個節點
root.right = TreeNode(right[0])
postorder.pop()
else:
root.right = self.buildTree(right, postorder)
if len(left) == 1:
root.left = TreeNode(left[0])
postorder.pop()
else:
root.left = self.buildTree(left, postorder)
return root