解题思路
就是一个函数,传入数组的左右边界,然后取数组的中间下标的值作为二叉树节点的值,不断递归就行
!!!注意,由于go的切片特性,其切片是不会对数组进行拷贝的所以不用额外创建一个函数。
代码
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution : def sortedArrayToBST (self, nums: List [int ] ) -> TreeNode: def helper (left, right ): if left > right: return None mid = (left + right) // 2 root = TreeNode(nums[mid]) root.left = helper(left, mid - 1 ) root.right = helper(mid + 1 , right) return root return helper(0 , len (nums) - 1 )
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 class Solution {public : TreeNode* sortedArrayToBST (vector<int >& nums) { return helper (nums, 0 , nums.size () - 1 ); } TreeNode* helper (vector<int >& nums, int left, int right) { if (left > right) { return nullptr ; } 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; } };
Go
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sortedArrayToBST(nums []int) *TreeNode {
if len(nums) == 0 {return nil}
mid := len(nums) / 2
node := &TreeNode{Val: nums[mid]}
node.Left = sortedArrayToBST(nums[0: mid])
node.Right = sortedArrayToBST(nums[mid + 1:])
return node
}