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(preorder: number[], inorder: number[]): TreeNode | null { return build( preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1 ) }
function build( preorder: number[], preStart: number, preEnd: number, inorder: number[], inStart: number, inEnd: number ): TreeNode | null { if (preStart > preEnd) return null const rootVal = preorder[preStart] 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( preorder, preStart + 1, preStart + leftSize, inorder, inStart, index - 1 ) root.right = build( preorder, preStart + leftSize + 1, preEnd, inorder, index + 1, inEnd ) return root }
|