将有序数组转换为二叉搜索树
题目思路与算法代码实现复杂度分析
题目
将有序数组转换为二叉搜索树
思路与算法
乍一看很简单,实际也很简单,今天的动态规划没做出来,就刷每日一题好了。保证平衡的最简单方法就是从每次都取最中间的数作为当前树或者子树的root节点。代码也没啥太好解释的,发现两周前做过这题,再贴一下。
代码实现
class Solution {
public TreeNode
sortedArrayToBST(int[] nums
) {
if(nums
== null
|| nums
.length
== 0)
return null
;
else
return getTree(nums
,0,nums
.length
-1);
}
public static TreeNode
getTree(int[] nums
,int left
,int right
){
while(left
<=right
){
int mid
= (left
+right
)/2;
TreeNode tn
= new TreeNode(nums
[mid
]);
tn
.left
= getTree(nums
,left
,mid
-1);
tn
.right
= getTree(nums
,mid
+1,right
);
return tn
;
}
return null
;
}
}
复杂度分析
将数组遍历了一遍,因此时间复杂度O(N)。
转载请注明原文地址:https://ipadbbs.8miu.com/read-52452.html