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 32
| function buildTree(inorder: number[], postorder: number[]): TreeNode | null { return build( inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1 ) }
function build( inorder: number[], inStart: number, inEnd: number, postorder: number[], postStart: number, postEnd: number ): TreeNode | null { if (inStart > inEnd) return null const rootVal = postorder[postEnd] let index = 0 for(let i = inStart;i <= inEnd;i++) { if (inorder[i] === rootVal) { index = i break } } const leftSize = index - inStart const root = new TreeNode(rootVal) root.left = build( inorder, inStart, index - 1, postorder, postStart, postStart + leftSize - 1 ) root.right = build( inorder, index + 1, inEnd, postorder, postStart + leftSize, postEnd - 1 ) return root }
|