[LeetCode By Go 61]108. Convert Sorted Array to Binary Search Tree

题目

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

解题思路

根据一个递增的数组构建一个高度平衡的二叉搜索树,有两个要求,
平衡二叉树:对于树上任意一个节点,其左右子树的高度差不超过1。

二叉搜索树

  1. 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  3. 任意节点的左、右子树也分别为二叉查找树;
  4. 没有键值相等的节点。

我们每一次以中位数进行分割,中间节点作为根,将数组分割为左右两个部分并递归构造二叉树,则左子树都小于根节点的值,右子树都大于根节点的值。

代码

/**
 * 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
}
    原文作者:miltonsun
    原文地址: https://www.jianshu.com/p/f95432e1a01e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞