文章目录
1. 题目
2. 思路
(1) 中序遍历+递归
- 给定数组的区间,每次取中间元素创建新的结点,并递归设置左右子树,注意递归前先判断区间是否大于等于1。
3. 代码
public class Test {
public static void main(String[] args) {
Solution solution = new Solution();
solution.sortedArrayToBST(new int[]{
-10, -3, 0, 5, 9});
}
}
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 sortedArrayToBST(nums, 0, nums.length - 1);
}
private TreeNode sortedArrayToBST(int[] nums, int left, int right) {
int mid = left + ((right - left) >>> 1);
TreeNode node = new TreeNode(nums[mid]);
if (mid > left) {
node.left = sortedArrayToBST(nums, left, mid - 1);
}
if (mid < right) {
node.right = sortedArrayToBST(nums, mid + 1, right);
}
return node;
}
}