ps:练习来自力扣
给你一个整数数组 nums
,其中元素已经按 升序 排列,请你将其转换为一棵
平衡
二叉搜索树。
// 定义二叉树节点类
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return buildBST(nums, 0, nums.length - 1);
}
private TreeNode buildBST(int[] nums, int left, int right) {
// 如果左边界大于右边界,说明子数组为空,返回 null
if (left > right) {
return null;
}
// 找到中间位置
int mid = left + (right - left) / 2;
// 创建根节点,值为中间元素的值
TreeNode root = new TreeNode(nums[mid]);
// 递归构建左子树
root.left = buildBST(nums, left, mid - 1);
// 递归构建右子树
root.right = buildBST(nums, mid + 1, right);
return root;
}
}