106. 从中序与后序遍历序列构造二叉树
func buildTree(inorder []int, postorder []int) *TreeNode {
if len(inorder) == 0 || len(postorder) == 0 {
return nil
}
return traversal(inorder, postorder)
}
func traversal(inorder []int, postorder []int) *TreeNode {
if len(postorder) == 0 {
return nil
}
rootVal := postorder[len(postorder) - 1]
root := &TreeNode{Val: rootVal}
rootIndex := 0
for i, v := range inorder {
if v == rootVal {
rootIndex = i
}
}
leftInOrder := inorder[:rootIndex]
rightInOrder := inorder[rootIndex+1:]
leftPostOrder := postorder[:len(leftInOrder)]
rightPostOrder := postorder[len(leftInOrder): len(postorder)-1]
root.Left = traversal(leftInOrder, leftPostOrder)
root.Right = traversal(rightInOrder, rightPostOrder)
return root
}