109. Convert Sorted List to Bina

2022-05-27  本文已影响0人  sarto

题目

将一个升序排列的数组转换为一刻平衡的二叉搜索树

解析

二叉搜索树是左子树小于根节点,又子树大于根节点,那么对于一个单调递增数组来说,我们任意选择一个数,这个数组左侧是小于该节点的,右侧是大于该节点的。恰好符合二叉搜索树的结构,然后我们递归下去,即可得到一颗完整的二叉搜索树,为了保证高度平衡,选择中间节点,保证左右子树结构相同,节点相同,那么高度自然也相同。

区别在于,这个题目给出了链表,比起直接数组切片访问,复杂了一些,将其转为数组。

伪代码

代码

func sortedListToBST(head *ListNode) *TreeNode {
    nums := make([]int, 0)
    for head != nil {
        nums=append(nums, head.Val)
        head=head.Next
    }
    return tobst(nums)
}

func tobst(nums []int) *TreeNode {
    if len(nums) == 0 {
        return nil
    }
    k := len(nums) / 2
    node := &TreeNode{Val: nums[k]}
    node.Left = tobst(nums[:k])
    node.Right = tobst(nums[k+1:])
    return node
}
image.png
上一篇下一篇

猜你喜欢

热点阅读