字符串转换为数组_LeetCode基础算法题第96篇:将有序数组转换为一个平衡二叉搜索树...

bb6d40c59d49e715dcf59af2648b9e77.png

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。

目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我

我会持续分享下去,敬请您的关注。

LeetCode 108. 将有序数组转换为一个平衡二叉搜索树(Convert Sorted Array to Binary Search Tree)

问题描述:

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

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

示例:

1f591355e3ff23d1ded71ff046958960.png

C语言实现:

将有序数组转换成一个平衡的二叉搜索树,意味着,这个二叉树,左边的节点数和右边的节点数相差不能大于1,否则可能就是不平衡的。(我说的是可能,在节点数很多的时候,这个结论是不成立的,但是不管怎么说满足这个条件的,一定是平衡的)

那么明显数组的最中间的节点“m”应该作为二叉树“T”的根节点,m的左边和右边的元素分别是二叉树“T”的左子树和右子树的节点。

同样的,对于“m”左边或右边的元素,依然需要选取一个大小居中的元素作为“T”的左子树或右子树的根节点,……。如此这样下去,最终就能形成一个新的平衡二叉搜索树。

在C的实现中,我们用指针来控制数组的访问非常方便。

这里需要提醒的是,当你通过指针改变数组的查找范围的时候,注意这个查找长度也同样需要更新。

代码如下:

230fd2993f14c1093991d84b6736c68b.png
7e4d5791341729423223ce07458a327b.png

python语言的实现:

python的实现和C实现基本是一致的,只是对于python来说,用切片代替指针来控制数组的搜索范围。

代码如下:

ece797888cbc7d0cacff5bea826bd5a0.png
8eb3d4bc8f743989228bfe974348d20c.png

Java语言的实现:

Java没有C的指针,也没有python那样的切片工具,因此我们定义了一个函数来做这件事情,函数要包含两个整型参数作为搜索数组的起始和结束下标。

其他的部分和C语言的实现基本一致。

代码如下:

d693bcc04f54ebfa7c29597305f08418.png
b4e278c3a23ec2ac7a3e567269b65098.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值