将有序数组转换为二叉搜索树 - 递归
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sortedArrayToBST(nums []int) *TreeNode {
size := len(nums)
if size == 0 {
return nil
}
mid := size >> 1
node := &TreeNode{ Val: nums[mid] }
node.Left = sortedArrayToBST(nums[:mid])
node.Right = sortedArrayToBST(nums[mid + 1:])
return node
}
将有序数组转换为二叉搜索树 - 迭代
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sortedArrayToBST(nums []int) *TreeNode {
n := len(nums)
if n == 0 {
return nil
}
root := &TreeNode{}
nodeQueue := []*TreeNode{ root }
leftQueue := []int{ 0 }
rightQueue := []int{ n - 1 }
for len(nodeQueue) > 0 {
node := nodeQueue[0]
nodeQueue = nodeQueue[1:]
left := leftQueue[0]
leftQueue = leftQueue[1:]
right := rightQueue[0]
rightQueue = rightQueue[1:]
mid := left + (right - left) >> 1
node.Val = nums[mid]
if left <= mid - 1 {
node.Left = &TreeNode{}
nodeQueue = append(nodeQueue, node.Left)
leftQueue = append(leftQueue, left)
rightQueue = append(rightQueue, mid - 1)
}
if right >= mid + 1 {
node.Right = &TreeNode{}
nodeQueue = append(nodeQueue, node.Right)
leftQueue = append(leftQueue, mid + 1)
rightQueue = append(rightQueue, right)
}
}
return root
}