高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)
高度平衡的二叉搜索树(平衡二叉树),定义见此Leetbook。简单来说,就是基于相同节点值构建出来的二叉搜索树中高度最小的,即为平衡二叉树(不唯一)。有 N 个节点的平衡二叉搜索树,它的高度是 logN 。并且,每个节点的两个子树的高度不会相差超过 1。
110. 平衡二叉树
class Solution:def isBalanced(self, root: TreeNode) -> bool:def height(node: TreeNode) -> int:if not node:return 0leftHeight = height(node.left)rightHeight = height(node.right)if leftHeight == -1 or rightHeight == -1 or abs(leftHeight - rightHeight) > 1:return -1else:return max(leftHeight, rightHeight) + 1return height(root) >= 0
自底向上的递归,类似于后序遍历,此节点不平衡或者其左子树或右子树不平衡就都返回-1,否则返回树的高度。
108. 将有序数组转换为二叉搜索树(面试题 04.02. 最小高度树)
class Solution:def sortedArrayToBST(self, nums: List[int]) -> TreeNode:if not nums:return Nonemid = len(nums) // 2root = TreeNode(nums[mid])root.left = self.sortedArrayToBST(nums[:mid])root.right = self.sortedArrayToBST(nums[mid+1:])return root
从有序递增数组创建一棵高度平衡的二叉搜索树、或平衡二叉树、或高度最小的二叉搜索树。方法是每次取中位数创建节点,然后左边比它小的是左子树,右边比它大的是右子树,递归。此题思路写法都和从遍历序列构造二叉树很像,可以参考一下。
1382. 将二叉搜索树变平衡
class Solution:def balanceBST(self, root: TreeNode) -> TreeNode:def inorder(node: TreeNode):if not node:return Noneinorder(node.left)nums.append(node.val)inorder(node.right)nums = []inorder(root)def creatBST(numlist) -> TreeNode:if not numlist:return Nonemid = len(numlist) // 2node = TreeNode(numlist[mid])node.left = creatBST(numlist[:mid])node.right = creatBST(numlist[mid+1:])return nodereturn creatBST(nums)
与上一题思路一样,只不过这里需要我们自己对二叉树进行中序遍历得到递增序列,再将数组转换为平衡二叉树。这题的官方题解给出了贪心的证明。
高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)相关推荐
- 【数据结构】AVL树(高度平衡的二叉搜索树)
AVL树(高度平衡的二叉搜索树) ①AVL树概念 ②平衡方法 <1>单旋 左单旋 右单旋 <2>双旋 先左后右旋 先右后左旋 ③代码实现 <1>所需头文件 < ...
- lintcode: 把排序数组转换为高度最小的二叉搜索树
题目: 把排序数组转换为高度最小的二叉搜索树 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 样例 给出数组 [1,2,3,4,5,6,7], 返回 4/ \2 6/ \ / \ 1 ...
- 牛客题霸 [二叉搜索树的第k个结点]C++题解/答案
牛客题霸 [二叉搜索树的第k个结点]C++题解/答案 题目: 给定一棵二叉搜索树,请找出其中的第k小的结点. 题解: 二叉搜索树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它 ...
- 二叉搜索树--基础篇
二叉搜索树Binary Search Tree(BSTs)又名二叉排序树,二叉查找树.而能够自平衡的叫平衡搜索树,包括AVL trees, 2-3 trees, 2-3-4 trees, B-tree ...
- 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明
红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...
- ( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. ...
- 队列的基础概念与经典题目(Leetcode题解-Python语言)
队列是先入先出(后入后出)的数据结构,常用操作就 push 和 popleft,Python中用列表中的 pop(0) 或者 collection.deque的 popleft() 都可以. 普通队列 ...
- 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之中——实际应用
上一节介绍了哈希表的原理与设计方法,这一节则直接python中现有的哈希表类型:哈希集合 set(集合)和哈希映射 dict(字典)来解决实际应用(刷题). 零.概念 在介绍实际应用之前,有一个概念我 ...
- 栈的基础概念与经典题目(Leetcode题解-Python语言)
栈是先入后出(后入先出)的数据结构,常用操作就 push 和 pop,Python中用列表实现即可,基本概念可以看Leetbook相关章节. 普通栈 232. 用栈实现队列 class MyQueue ...
最新文章
- ASP.NET Web API WebHost宿主环境中管道、路由
- Android Retrofit使用教程(三):Retrofit与RxJava初相逢
- php实现tcp连接esp8266,ESP8266之TCP透传
- python des解密_python实现DES加密解密方法实例详解
- VC++2010中的GetWindowText与GetWindowTextW的区别
- 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
- 利用blink CEP实现流计算中的超时统计问题
- python调用scp上传目录_Python调用scp向服务器上传文件示例
- java 485通讯_CAKJ-963U3-KT带485通讯上下限报警智能型仪表
- 用java观察者模式解耦经典三层架构
- Java银行账户管理子系统
- 基于微信的图书馆服务系统的设计与实现
- 谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
- python爬虫小项目挣钱兼职,python程序员兼职平台
- java开发中遇到的问题_Java开发过程中遇到的问题及解决方法
- c#dataview遍历_c# – 列出DataView
- idea永久激活使用
- 【weJudge】1109. [ACM]呐,你想成为什么颜色呢?
- 阿里云互动课堂解决方案助力淘宝教育,打造普惠教育平台
- win10电脑显示 “您的账户已被停用。请向系统管理员咨询”,如何启动账号?
热门文章
- 重磅!win10无法安装.NET Framework 3.5服务解决办法(附离线安装包下载)
- 【地理建模】空间统计分析:空间权重矩阵、全局空间自相关、局部空间自相关
- 定量遥感:计算地方时和太阳高度角(C++代码)
- Android之 ListView滑动时不加载图片
- 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突
- Android之调用微信登陆、分享、支付
- Struts2中的OGNL表达式
- (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍
- print的describe的展示全部数据_大数据项目中的QA需要迎接新的挑战
- Excel有哪些需要熟练掌握而很多人不会的技能!