高度平衡的二叉搜索树(平衡二叉树),定义见此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语言)相关推荐

  1. 【数据结构】AVL树(高度平衡的二叉搜索树)

    AVL树(高度平衡的二叉搜索树) ①AVL树概念 ②平衡方法 <1>单旋 左单旋 右单旋 <2>双旋 先左后右旋 先右后左旋 ③代码实现 <1>所需头文件 < ...

  2. lintcode: 把排序数组转换为高度最小的二叉搜索树

    题目: 把排序数组转换为高度最小的二叉搜索树 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 样例 给出数组 [1,2,3,4,5,6,7], 返回 4/ \2 6/ \ / \ 1 ...

  3. 牛客题霸 [二叉搜索树的第k个结点]C++题解/答案

    牛客题霸 [二叉搜索树的第k个结点]C++题解/答案 题目: 给定一棵二叉搜索树,请找出其中的第k小的结点. 题解: 二叉搜索树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它 ...

  4. 二叉搜索树--基础篇

    二叉搜索树Binary Search Tree(BSTs)又名二叉排序树,二叉查找树.而能够自平衡的叫平衡搜索树,包括AVL trees, 2-3 trees, 2-3-4 trees, B-tree ...

  5. 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明

    红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...

  6. ( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】

    二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. ...

  7. 队列的基础概念与经典题目(Leetcode题解-Python语言)

    队列是先入先出(后入后出)的数据结构,常用操作就 push 和 popleft,Python中用列表中的 pop(0) 或者 collection.deque的 popleft() 都可以. 普通队列 ...

  8. 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之中——实际应用

    上一节介绍了哈希表的原理与设计方法,这一节则直接python中现有的哈希表类型:哈希集合 set(集合)和哈希映射 dict(字典)来解决实际应用(刷题). 零.概念 在介绍实际应用之前,有一个概念我 ...

  9. 栈的基础概念与经典题目(Leetcode题解-Python语言)

    栈是先入后出(后入先出)的数据结构,常用操作就 push 和 pop,Python中用列表实现即可,基本概念可以看Leetbook相关章节. 普通栈 232. 用栈实现队列 class MyQueue ...

最新文章

  1. ASP.NET Web API WebHost宿主环境中管道、路由
  2. Android Retrofit使用教程(三):Retrofit与RxJava初相逢
  3. php实现tcp连接esp8266,ESP8266之TCP透传
  4. python des解密_python实现DES加密解密方法实例详解
  5. VC++2010中的GetWindowText与GetWindowTextW的区别
  6. 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
  7. 利用blink CEP实现流计算中的超时统计问题
  8. python调用scp上传目录_Python调用scp向服务器上传文件示例
  9. java 485通讯_CAKJ-963U3-KT带485通讯上下限报警智能型仪表
  10. 用java观察者模式解耦经典三层架构
  11. Java银行账户管理子系统
  12. 基于微信的图书馆服务系统的设计与实现
  13. 谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
  14. python爬虫小项目挣钱兼职,python程序员兼职平台
  15. java开发中遇到的问题_Java开发过程中遇到的问题及解决方法
  16. c#dataview遍历_c# – 列出DataView
  17. idea永久激活使用
  18. 【weJudge】1109. [ACM]呐,你想成为什么颜色呢?
  19. 阿里云互动课堂解决方案助力淘宝教育,打造普惠教育平台
  20. win10电脑显示 “您的账户已被停用。请向系统管理员咨询”,如何启动账号?

热门文章

  1. 重磅!win10无法安装.NET Framework 3.5服务解决办法(附离线安装包下载)
  2. 【地理建模】空间统计分析:空间权重矩阵、全局空间自相关、局部空间自相关
  3. 定量遥感:计算地方时和太阳高度角(C++代码)
  4. Android之 ListView滑动时不加载图片
  5. 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突
  6. Android之调用微信登陆、分享、支付
  7. Struts2中的OGNL表达式
  8. (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍
  9. print的describe的展示全部数据_大数据项目中的QA需要迎接新的挑战
  10. Excel有哪些需要熟练掌握而很多人不会的技能!