Leetcode - Construct Binary Tree from Inorder and Postorder Traversal
https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
inorder = [9,3,15,20,7] postorder = [9,15,7,20,3]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
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 | /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func buildTree(inorder [] int , postorder [] int ) *TreeNode { if len(inorder) == 0 || len(postorder) == 0 || len(inorder) != len(postorder) { return nil } hash := map[ int ] int {} for i, v := range inorder { hash[v] = i } return build(inorder, postorder, 0, len(inorder)-1, 0, len(postorder)-1, hash) } func build(inorder, postorder [] int , inStart, inEnd, postStart, postEnd int , hash map[ int ] int ) *TreeNode { if inStart > inEnd || postStart > postEnd { return nil } root := &TreeNode{Val: postorder[postEnd]} index := hash[root.Val] root.Left = build(inorder, postorder, inStart, index-1, postStart, postStart + index - inStart - 1, hash) root.Right = build(inorder, postorder, index + 1, inEnd, postStart + index - inStart, postEnd - 1, hash) return root } |