将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。
示例:
给定有序数组: [-10,-3,0,5,9], 一种可行答案是:[0,-3,9,-10,null,5],它可以表示成下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example:
Given the sorted array: [-10,-3,0,5,9], One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST: 0 / \ -3 9 / / -10 5
个人思路:
既然是有序数组,则取中间项则可以保证最终得到的二叉搜索树为平衡的。于是取中间项为根节点,并将其左右分别拆分为左右子树的数组,用递归的方式再分别使其计算左右子树的根节点,直到取得数组为空返回空节点。
代码(JavaScript):
/**
* 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;
}
var l=nums.length;
var half=parseInt(l/2);
var root=new TreeNode(nums[half]);
if(half==0){
return root;
}
var left=new Array(half);
var right=new Array(l-half-1);
for(var i=0;i<left.length;i++){
left[i]=nums[i];
}
root.left=arguments.callee(left);
for(var i=0;i<right.length;i++){
right[i]=nums[i+half+1];
}
root.right=arguments.callee(right);
return root;
};