将有序数组转换为二叉搜索树

36 阅读1分钟

思路:

中间节点作为根节点,左边作为左子树,右边作为右子树

每个节点都这样操作,采用递归

func sortedArrayToBST(nums []int) *TreeNode {
	//注意,这里right的边界是len(nums)-1
	//return toBST(nums, 0, len(nums))
	return toBST(nums, 0, len(nums)-1)
}

func toBST(nums []int, left, right int) *TreeNode {
	if right < left {
		return nil
	}
	mid := left + (right-left)/2
	root := &TreeNode{
		Val: nums[mid],
	}
	root.Left = toBST(nums, left, mid-1)
	root.Right = toBST(nums, mid+1, right)
	return root
}