【LeetCode】108. 将有序数组转换为二叉搜索树
创始人
2024-11-12 14:06:57
0

1. 题目

在这里插入图片描述

2. 分析

先理解一下平衡二叉树的概念:平衡二叉树重在平衡,同时需要保证顺序大小。

本题的思路比较简单,在构建平衡二叉树的时候,需要保证左右子树的高度相同,高度相同也就意味着要均匀切分,那么对于有序数组直接采取二分的方法是不是就能满足这个要求了呢?(可以手动比画一下,可以发现是没问题的哈)。所以对一个有序数组做二分,小于mid值对应的数组作为左子树,大于mid值的对应数组作为右子树。递归处理即可解决。

如果提高一下难度,可以将本题的数组替换成链表。二分操作不再是简单的(left+right)//2了,而是需要通过快慢指针找到中间节点做分割。更详细的可以参考这篇文章。

3. 代码

# Definition for a binary tree node. # class TreeNode: #     def __init__(self, val=0, left=None, right=None): #         self.val = val #         self.left = left #         self.right = right class Solution:     def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:         root = self.dfs(0, len(nums)-1, nums)         return root      def dfs(self, left, right, nums):        	# 不要忘了下面这种递归的出口         if left > right:             return None         if left == right:             return TreeNode(nums[left])         mid = (left + right) // 2         lnode = self.dfs(left, mid-1, nums)         rnode = self.dfs(mid+1, right, nums)         cur_val = nums[mid]         cur_root = TreeNode(cur_val, lnode, rnode)         return cur_root 

相关内容

热门资讯

专业讨论!"poke... 专业讨论!"pokernow辅助控制,微乐小程序黑科技免费"好像是真的有外开挂教程-2026运微乐小...
今天上午"约局吧如何... 今天上午"约局吧如何查看是否有挂,微信小程序怎么开挂"都是有有外开挂脚本-20261、微信小程序怎么...
信息共享"拱趴大菠萝... 信息共享"拱趴大菠萝有什么挂,微乐自建房透视"本来有有外开挂教程-20261、微乐自建房透视模拟器是...
我来分享"德州透视是... 我来分享"德州透视是真的吗,微信小程序微乐怎么才能发好牌"本来有有外开挂挂-20261)微信小程序微...
玩家必看教程!"智星... 玩家必看教程!"智星菠萝透视,微乐小程序辅助器代理"都是存在有外开挂方法-2026进入游戏-大厅左侧...
分享一款!"来玩ap... 分享一款!"来玩app破解,微乐游戏公众号辅助器"果然有有外开挂软件-20261、每一步都需要思考,...
实测分享"来玩app... 实测分享"来玩app破解版,微信微乐游戏苹果辅助器"真是有有外开挂神器-20261、玩家可以在微信微...
针对"pokemmo... 针对"pokemmo脚本辅助下载,微乐a3纸牌有脚本"好像存在有外开挂神器-2026亲,关键说明,微...
攻略讲解"佛手在线大... 攻略讲解"佛手在线大菠萝智能辅助器,微乐自建房辅助入口官网"一贯是真的有外开挂神器-2026亲,关键...
现场直击"pokem... 现场直击"pokemmo辅助脚本,微信小程序微乐修改器"其实真的是有外开挂器-20261、打开软件启...