下面的注释是我写题的第一版草稿,还有错误的地方,比如说return
的值,修改比较多的是middle
生成的地方,还有什么时候初始化root
https://leetcode-cn.com/problems/trim-a-binary-search-tree/submissions/
// 怪不得我说和构造平衡二叉树的题目有点像,就直接从中间分割就行了
// int middle = right - left / 2 + left; 偶数就是偏左,奇数因为略去小数位,就是中间
// 递归函数:
// 传入参数:(int[] nums, int left, int right)
// 返回:TreeNode root;
// 终止条件:left == right return null
// 找middle
// 处理逻辑:
// if(nums.size == 1) return new TreeNode(nums[left]);
// else
// root.left = traverse(nums, left, middle);
// root.right = traverse(nums, middle+1, right);
// return root = new TreeNode(nums[middle]);
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return traverse(nums, 0, nums.length);
}
public TreeNode traverse(int[] nums, int left, int right){
if(left == right) return null;//数组没值,直接返回
int middle = (right - left) / 2 + left;
TreeNode root = new TreeNode(nums[middle]);
if(right - left == 1) return new TreeNode(nums[left]);
else{
//数组大于1
root.left = traverse(nums, left, middle);
root.right = traverse(nums, middle+1, right);
}
return root;
}
}