Ieetcode Easy 108. 将有序数组转换为二叉搜索树

    xiaoxiao2023-11-20  160

    题目:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 第一次提交代码

    public TreeNode solution(int[] nums){ TreeNode root = null; if(nums.length == 0) return root; // createNode(nums,0,nums.length-1,root); // 上面的问题总是返回null,猜测原因是引用作为参数传递给递归方法,由于是值传递,所以不会真正赋值。 root = createnode1(nums, 0, nums.length - 1); return root; } void createNode(int[] arr,int start,int end,TreeNode node){ if(end<start){ node = null; return; } // 找到当前数组中间值 int mid = 0; if(start%2!=0 && end%2!=0){ mid = start/2+end/2+1; }else{ mid = start/2+end/2; } TreeNode curnode = new TreeNode(arr[mid]); node = curnode; createNode(arr,start,mid-1,curnode.left); createNode(arr,mid+1,end,curnode.right); }

    编译出现错误:root无论如何返回null,原因是将引用作为参数传递给方法,由于是值传递所以无法给父节点正确赋值。应该将方法返回某个节点的引用,在上一层递归中将该引用赋值给当前层次节点。更改后代码

    class Solution { public TreeNode sortedArrayToBST(int[] nums) { if(nums == null || nums.length == 0) return null; return createnode(nums,0,nums.length-1); } TreeNode createnode(int[] arr,int start,int end){ if(end<start) return null; int mid = start + (end-start)/2; TreeNode node = new TreeNode(arr[mid]); node.left = createnode(arr,start,mid-1); node.right = createnode(arr,mid+1,end); return node; } }
    最新回复(0)