# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def sortedArrayToBST(self, nums):
def helper(left, right):
if left > right:
return None
mid = (left + right) // 2
node = TreeNode(nums[mid])
node.left = helper(left, mid - 1)
node.right = helper(mid + 1, right)
return node
return helper(0, len(nums) - 1)
// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
TreeNode* sortedArrayToBST(vector& nums) {
return helper(nums, 0, nums.size() - 1);
}
private:
TreeNode* helper(vector& nums, int left, int right) {
if (left > right) return nullptr;
int mid = left + (right - left) / 2;
TreeNode* node = new TreeNode(nums[mid]);
node->left = helper(nums, left, mid - 1);
node->right = helper(nums, mid + 1, right);
return node;
}
};
// Definition for a binary tree node.
public 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 helper(nums, 0, nums.length - 1);
}
private TreeNode helper(int[] nums, int left, int right) {
if (left > right) return null;
int mid = left + (right - left) / 2;
TreeNode node = new TreeNode(nums[mid]);
node.left = helper(nums, left, mid - 1);
node.right = helper(nums, mid + 1, right);
return node;
}
}
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {number[]} nums
* @return {TreeNode}
*/
var sortedArrayToBST = function(nums) {
function helper(left, right) {
if (left > right) return null;
const mid = Math.floor((left + right) / 2);
const node = new TreeNode(nums[mid]);
node.left = helper(left, mid - 1);
node.right = helper(mid + 1, right);
return node;
}
return helper(0, nums.length - 1);
};
nums
where the elements are sorted in ascending order, your task is to convert it into a height-balanced binary search tree (BST). A height-balanced BST is a binary tree where the depth of the two subtrees of every node never differs by more than one.nums
must be used exactly once in the tree.nums
is sorted in strictly increasing order.null
(or None
), as there are no nodes to add.nums = [-10, -3, 0, 5, 9]
as an example.[-10, -3, 0, 5, 9]
. The middle element is 0
(index 2). This becomes the root.[-10, -3]
(indices 0 to 1)
-10 + -3 = -13 / 2 = -6.5
, but since we use integer division, index 0 is the middle. So, -10
becomes the left child.[-10, -3]
is just [-3]
(index 1). -3
becomes the right child of -10
.[5, 9]
(indices 3 to 4)
5
), so 5
becomes the right child of 0
.[5, 9]
is just [9]
(index 4). 9
becomes the right child of 5
.0
-10
-3
5
9
O(n^2)
(for a skewed tree).O(n)
, where n
is the number of elements in nums
. Each element is visited and used exactly once to create a node.O(log n)
for the recursion stack in a balanced tree (since the height is log n
), plus O(n)
for the nodes themselves (but that's required for the output).