又是一晚上都用来刷力扣了,恨呐。我咋那么废物,这个简单题还不会做。
现在简单题就是一点就通,有点弯就想不出来了,且代码实现不难。。
108.将有序数组转换为二叉搜索树
做不来,而且题目一开始理解错了,要的是每个节点的左右子树高度差不超过1,我以为只要这个树总体左右2边高度差不超过1。
这题代码实现不难,主要是在数组里用二分的思路没想到。对数组进行范围划分后取中间的值就是当前范围的根结点。左右子树的高度就达到要求了。
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
TreeNode root=null;
return dfs(root,0,nums.length-1,nums);
}
TreeNode dfs(TreeNode root,int left,int right,int[] nums){
// 当前节点需在当前范围内找,找到后返回该节点
if(root==null){
TreeNode p=new TreeNode();
if(left<=right){
p.val=nums[(left+right)/2];
root=p;
}
else return null;
}
root.left=dfs(root.left,left,left+(-left+right)/2-1,nums);
root.right=dfs(root.right,left+(right-left)/2+1,right,nums);
return root;
}
}