力扣108 补9.17

又是一晚上都用来刷力扣了,恨呐。我咋那么废物,这个简单题还不会做。

现在简单题就是一点就通,有点弯就想不出来了,且代码实现不难。。

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;

    }

}

 

你可能感兴趣的:(力扣,算法,leetcode,数据结构,java,职场和发展)