tips:
1.二叉搜索树BST:即二叉排序树。
2.二叉平衡树:每个根结点的左子树-右子树的值(平衡因子)不超过1。
法一:中序遍历,选择中间的元素作为根结点
解题思路:
由于数组是按升序序列排序的,所以根结点从数组中间开始的话不会导致二叉树不平衡,最多只会有1的高差。
从数组中间元素开始作为根结点,mid=(left+right)/2向下取整。
然后递归的将根结点的左子树按mid=(left+mid-1)/2向下取整。
再递归右子树mid=(mid+1+right)/2
func sortedArrayToBST(nums []int) *TreeNode {
return BST(nums,0,len(nums)-1)
}
func BST(nums []int,left,right int)*TreeNode{
if left>right{
return nil
}
mid:=(left+right)/2
root:=&TreeNode{Val: nums[mid]}
root.Left=BST(nums,left,mid-1)
root.Right=BST(nums,mid+1,right)
return root
}
时间复杂度:O(n),n为数组长度
空间复杂度:O(logn),取决于递归栈的深度