首页 > 试题广场 >

高度最小的BST

[编程题]高度最小的BST
  • 热度指数:11994 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个元素各不相同的有序序列int[] vals升序排列),请编写算法创建一棵高度最小的二叉查找树,并返回二叉查找树的高度。

class MinimalBST:
    def buildMinimalBST(self, vals):
        # write code here
        if not vals:
            return 0
        mid = int(len(vals) / 2)
        return max(self.buildMinimalBST(vals[:mid]), self.buildMinimalBST(vals[mid + 1:])) + 1

发表于 2019-08-22 22:19:25 回复(0)

python solution


class MinimalBST:
    def buildMinimalBST(self, vals):
        res=0
        while 2**res<len(vals):
            res+=1
        return res
发表于 2017-10-31 15:54:27 回复(1)
# -*- coding:utf-8 -*-
class MinimalBST:
    def buildMinimalBST(self, vals):
        # write code here
        if len(vals)<=0:
            return None
        root = self.buildBST(vals,0,len(vals)-1)
        height = self.getHeight(root)
        return height
    
    def buildBST(self,vals,left,right):
        if left>right:
            return None
        mid = (left + right)/2
        root = TreeNode(vals[mid])
        root.left = self.buildBST(vals,left,mid-1)
        root.right = self.buildBST(vals,mid+1,right)
        return root
    
    def getHeight(self, root):
        if root is None:
            return 0
        if self.getHeight(root.left)>self.getHeight(root.right):
            return self.getHeight(root.left)+1
        else:
            return self.getHeight(root.right)+1
    

发表于 2017-07-14 20:00:23 回复(0)
根据题目可以直接计算出高度:
# -*- coding:utf-8 -*-
class MinimalBST:
    def buildMinimalBST(self, vals):
        import math
        return int(math.log(len(vals), 2)) + 1
如果要构建一个高度最小的二叉查找树,尽量让根结点的左右子树的结点数量越接近越好。也就是要让序列中间结点成为根结点。中间结点的左边序列构成左子树,右边序列构成右子树。
然后以类似的构建方式构建左右子树。也就是递归方式

发表于 2016-08-02 21:43:35 回复(0)