概述
给出一个排序的数组。该数组是以升序排序的。目的是将该排序的数组转换为高度平衡的BST。
一个平衡的BST是一个BST,其中左子树的高度和右子树的高度在每个节点上最大相差1。
程序
以下是相同的程序。
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func sortedArrayToBST(nums []int) *TreeNode {
length := len(nums)
return sortedArrayToBSTUtil(nums, 0, length-1)
}
func sortedArrayToBSTUtil(nums []int, first int, last int) *TreeNode {
if first > last {
return nil
}
if first == last {
return &TreeNode{
Val: nums[first],
}
}
mid := (first + last) / 2
root := &TreeNode{
Val: nums[mid],
}
root.Left = sortedArrayToBSTUtil(nums, first, mid-1)
root.Right = sortedArrayToBSTUtil(nums, mid+1, last)
return root
}
func traverseInorder(root *TreeNode) {
if root == nil {
return
}
traverseInorder(root.Left)
fmt.Println(root.Val)
traverseInorder(root.Right)
}
func main() {
root := sortedArrayToBST([]int{1, 2, 3, 4, 5})
traverseInorder(root)
}
输出
1
2
3
4
5