1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package main
func buildTree(inorder []int, postorder []int) *TreeNode { indexMap := make(map[int]int) for i, v := range inorder { indexMap[v] = i } return helper(inorder, postorder, 0, len(inorder)-1, 0, len(postorder)-1, indexMap) }
func helper(inorder, postorder []int, inStart, inEnd, postStart, postEnd int, indexMap map[int]int) *TreeNode { if postStart > postEnd { return nil } rootVal := postorder[postEnd] root := &TreeNode{Val: rootVal} inRoot := indexMap[rootVal] leftSize := inRoot - inStart root.Left = helper(inorder, postorder, inStart, inRoot-1, postStart, postStart+leftSize-1, indexMap) root.Right = helper(inorder, postorder, inRoot+1, inEnd, postStart+leftSize, postEnd-1, indexMap) return root }
|