前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Leetcode][python]Convert Sorted Array to Binary Search Tree

[Leetcode][python]Convert Sorted Array to Binary Search Tree

作者头像
蛮三刀酱
发布2019-03-26 17:10:58
4850
发布2019-03-26 17:10:58
举报

题目大意

将一个排序好的数组转换为一颗二叉查找树,这颗二叉查找树要求是平衡的。

知识点

二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

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

二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。

解题思路

由于要求二叉查找树是平衡的。所以我们可以选在数组的中间那个数当树根root,然后这个数左边的数组为左子树,右边的数组为右子树,分别递归产生左右子树就可以了。

注意:如果是偶数个数的数组,那么答案就有多种可能。

这也是为什么我的代码分为奇数偶数判定,而标准答案没用,经过测试,两种代码生成两种不同的答案,并且leetcode系统都能接受。

代码

我提交的

代码语言:javascript
复制
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if len(nums) == 0:
            return None
        if len(nums) == 1:
            return TreeNode(nums[0])
        if len(nums)%2 == 1:
            tree = TreeNode(nums[len(nums)/2])
            tree.left = self.sortedArrayToBST(nums[:(len(nums)/2)])
            tree.right = self.sortedArrayToBST(nums[-(len(nums)/2):])
        else:
            tree = TreeNode(nums[len(nums)/2-1])
            tree.left = self.sortedArrayToBST(nums[:(len(nums)/2)-1])
            tree.right = self.sortedArrayToBST(nums[-(len(nums)/2):])
        return tree

标准代码

代码语言:javascript
复制
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    # @param num, a list of integers
    # @return a tree node
    def sortedArrayToBST(self, num):
        length = len(num)
        if length == 0:
            return None
        if length == 1:
            return TreeNode(num[0])
        root = TreeNode(num[length / 2])
        root.left = self.sortedArrayToBST(num[:length/2])
        root.right = self.sortedArrayToBST(num[length/2 + 1:])
        return root

总结

  1. 已经做了很多递归的题目了,这种解题结构已经定型了,很多题目都可以这样套
  2. 切片
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目大意
    • 知识点
    • 解题思路
    • 代码
      • 我提交的
        • 标准代码
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档