leetcode-將有序陣列轉換為二叉搜尋樹(JavaScript)
阿新 • • 發佈:2018-11-14
將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:
給定有序陣列: [-10,-3,0,5,9], 一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹: 0 / \ -3 9 / / -10 5
思路:
每次將中間點作為根節點,將陣列左右兩邊的部分分別遞迴呼叫,作為根節點的左右子樹。這樣可以保證左右子樹的高度差的絕對值不超過1.
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {number[]} nums * @return {TreeNode} */ var sortedArrayToBST = function(nums) { if (nums.length === 0) { return null; } if (nums.length === 1) { return new TreeNode(nums[0]) } let rootIndex = parseInt(nums.length / 2); let root = new TreeNode(nums[rootIndex]); root.left = sortedArrayToBST(nums.slice(0, rootIndex)); root.right = sortedArrayToBST(nums.slice(rootIndex+1)) return root };