Problem
Analysis Process
In a given sequence traversal array, the number in each subtree must be continuous in the array, so the number contained in the subtree can be determined through the array subindex range, denoted as [left,right] for the entire middle order ergo sequence, the subscript ranges from left=0 toright=nums.length -1 when left>right, the balanced binary search tree is
In order traversal, always select the number left of the middle position as the root node
Select the number to the left of the middle position as the root node, and the root node is subscripted as mid=(left+right)/2
The division here is integer division
Code
golang
func sortedArrayToBST(nums []int) *TreeNode {
return helper(nums, 0, len(nums) - 1)
}
func helper(nums []int, left, right int) *TreeNode {
if left > right {
return nil
}
mid := (left + right) / 2 //Always select the number to the left of the center position as the root node
root := &TreeNode{Val: nums[mid]}
root.Left = helper(nums, left, mid - 1)
root.Right = helper(nums, mid + 1, right)
return root
}
java
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return helper(nums, 0, nums.length - 1);
}
public TreeNode helper(int[] nums, int left, int right) {
if (left > right) {
return null;
}
//Always select the number to the left of the center position as the root node
int mid = (left + right) / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = helper(nums, left, mid - 1);
root.right = helper(nums, mid + 1, right);
return root;
}
}