题目
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
解题思路
根据一个递增的数组构建一个高度平衡的二叉搜索树,有两个要求,
平衡二叉树:对于树上任意一个节点,其左右子树的高度差不超过1。
二叉搜索树:
- 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
- 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
- 任意节点的左、右子树也分别为二叉查找树;
- 没有键值相等的节点。
我们每一次以中位数进行分割,中间节点作为根,将数组分割为左右两个部分并递归构造二叉树,则左子树都小于根节点的值,右子树都大于根节点的值。
代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func InitBST(input []int) (t *TreeNode) {
len1 := len(input)
if 0 == len1 {
return nil
}
middle := len1 / 2
t = new(TreeNode)
t.Val = input[middle]
t.Left = InitBST(input[:middle])
t.Right = InitBST(input[middle+1:])
return t
}
func sortedArrayToBST(nums []int) *TreeNode {
var root *TreeNode
root = InitBST(nums)
return root
}