前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 108. 将有序数组转换为二叉搜索树

LeetCode 108. 将有序数组转换为二叉搜索树

作者头像
Michael阿明
发布2020-07-13 14:29:57
2690
发布2020-07-13 14:29:57
举报

1. 题目

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

代码语言:javascript
复制
示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

      0
     / \
   -3   9
   /   /
 -10  5

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 二叉搜索树要平衡,那么左右子树节点数量接近相等最好
  • 每次取数组中间点为root
  • 递归划分数组即可
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return build(nums,0,nums.size()-1);
    }
    TreeNode* build(vector<int>& nums, int start, int end)
    {
    	if(start > end)
    		return NULL;
    	int mid = start+((end-start)>>1);
    	TreeNode *root = new TreeNode(nums[mid]);
    	root->left = build(nums,start,mid-1);
    	root->right = build(nums,mid+1,end);
    	return root;
    }
};

python3 解答

代码语言:javascript
复制
class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        def build(l,r):
            if l > r:
                return None
            mid = (l+r)>>1
            root = TreeNode(nums[mid])
            root.left = build(l,mid-1)
            root.right = build(mid+1,r)
            return root
        return build(0,len(nums)-1)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档