由于后序遍历时最后节点是根节点,接着是右子树的根节点,一直往下。。。
# 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