leetcode105.從前序與中序遍歷序列構造二叉樹
阿新 • • 發佈:2021-11-23
leetcode105.從前序與中序遍歷序列構造二叉樹
題目
給定一棵樹的前序遍歷 preorder
與中序遍歷 inorder
。請構造二叉樹並返回其根節點。
用例
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
Input: preorder = [-1], inorder = [-1]
Output: [-1]
求解
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */ /** * @param {number[]} preorder * @param {number[]} inorder * @return {TreeNode} */ var buildTree = function(preorder, inorder) { //遞迴構建 return tree(0,preorder.length-1,0,inorder.length-1,preorder, inorder) function tree(pre_left,pre_right,in_left,in_right,preorder,inorder){ if(in_left>in_right){ return null } let root = new TreeNode() root.val = preorder[pre_left] let in_mid = 0 for(let i = in_left;i<=in_right;i++){ if(preorder[pre_left]==inorder[i]){ in_mid = i break } } root.left = tree(pre_left+1,pre_left+(in_mid-in_left),in_left,in_mid-1,preorder,inorder) root.right = tree(pre_left+(in_mid-in_left)+1,pre_right,in_mid+1,in_right,preorder,inorder) return root } };