LeetCode,二叉搜素树
1. 修剪二叉搜索树
LeetCode569. 力扣
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。
所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。
图1. 修剪二叉搜索树示例
分析:
(1)对于当前节点的值:
如果当前的节点<下界,那么,看该节点的右子树(看比较大的一边);若当前节点>上界,那么,看该节点的左子树(看比较小的一边);
(2)对当前节点的左右子树:
如果当前节点的右节点>上界,看右节点的左子树是否满足上界条件(小于上界),若满足,则将当前节点的右指针指向右节点的左子树;
如果当前节点的左节点<下界,看左节点的右子树是否满足下界条件(大于下界),若满足,则将当前节点的左指针指向左节点的右子树。
每一个节点都是如此,因此结构为递归结构。
2. 将有序数组转化为二叉搜索树
LeetCode108. 力扣
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
图2. 将有序数组转化为二叉搜索树
分析,以数组[-10, -3, 0, 5, 9]为例,
首先,为了保障二叉搜索树为一个平衡树,那么,左右子树的节点个数必须保证不能相差太大,因此,选取的根节点为中间的节点,索引为i = int(len(nums)/2)
(1)若 i 不是最后一个元素,则其右子树为:
nums[i+1 : ]
构造平衡二叉搜索树的方式同理;
(2)若 i 不是第一个元素,则其左子树为:
nums[ : i]
构造平衡二叉搜素树的方式同理。
由该分析知,构造该平衡二叉搜素树的算法为递归结构。
3. 代码
# Definition for a binary tree node.
class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef set_left(self, left):self.left = leftdef set_right(self, right):self.right = rightclass Solution(object):def trimBST(self, root, low, high):""":type root: TreeNode:type low: int:type high: int:rtype: TreeNode"""current = rootif current.val < low:if current.right != None:return self.trimBST(current.right, low, high)else:return Noneelif current.val > high:if current.left != None:return self.trimBST(current.left, low, high)else:return Noneif current.left != None:if current.left.val < low:if current.left.right != None:current.left = self.trimBST(current.left.right, low, high)else:current.left = Noneelse:current.left = self.trimBST(current.left, low, high)if current.right != None:if current.right.val > high:if current.right.left != None:current.right = self.trimBST(current.right.left, low, high)else:current.right = Noneelse:current.right = self.trimBST(current.right, low, high)return rootdef sortedArrayToBST(self, nums):""":type nums: List[int]:rtype: TreeNode"""i = int(len(nums)/2)root = TreeNode(nums[i])if i == len(nums)-1:root.right = Noneelse:root.right = self.sortedArrayToBST(nums[i+1:])if i == 0:root.left = Noneelse:root.left = self.sortedArrayToBST(nums[:i])return root
LeetCode,二叉搜素树相关推荐
- LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...
- 《剑指offer》-- 从上往下打印二叉树、二叉搜素树的后序遍历、二叉树中和为某一值的路径、二叉树与双向链表
一.从上往下打印二叉树: 1.题目: 上往下打印出二叉树的每个节点,同层节点从左至右打印. 2.解题思路: 用arraylist模拟一个队列来存储相应的TreeNode. 3.代码实现: public ...
- 掉一根头发,搞定二叉排序(搜索)树
文章已收录在 数据结构与算法学习仓库 前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度,规则相对是简单的,后面会讲解一些比较常见的数据结构,用多图的方式让大家更容易吸收. 在 ...
- 数据结构与算法—二叉排序(查找)树
目录 前言 树 二叉树 二叉排序(搜索)树 概念 构造 主要方法 findmax(),findmin() isContains(int x) insert(int x) delete(int x) 完 ...
- 数据结构---二叉平衡排序树的删除
数据结构-二叉平衡排序树的删除 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> typedef struct avlT ...
- 二叉平衡树(AVL树)详细理解
二叉平衡树(AVL树) AVL树插入元素结论 单旋转: 双旋转: 如果看到后面会发现,我下面举得列子,类型一和类型三和我结论里面的有点不一样,那是因为类型一的节点4和类型三的节点14无论以何种方式都能 ...
- 14.曲面消隐——图像空间算法(Z-buffer)+对象空间算法(画家算法+二叉空间剖分树)
♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥ ...
- 数据结构与算法——二叉平衡树(AVL树)详解
文章目录 AVL树概念 不平衡概况 四种平衡旋转方式 RR平衡旋转(左单旋转) LL平衡旋转(右单旋转) RL平衡旋转(先右后左双旋转) LR平衡旋转(先左后右单旋转) java代码实现 总结 AVL ...
- 详解 二叉搜索树-----AVL树
二叉搜索树 根结点比左子树中所有结点都大 根结点比右子树所有结点都小 最小的元素在最左侧 最大的元素在最右侧 中序遍历有序 具有以上的特征的二叉树就是二叉搜索树也叫二叉排序数 二叉搜索树的操作 查找 ...
最新文章
- c mysql批量插入优化_MySQL实现批量插入以优化性能的教程
- 【Linux】27.Markdown的用法
- error C2872: “IDocument”: 不明确的符号
- 与老外交谈的常用句子
- SVN安装和使用总结
- 机器学习常用的算法整理:线性回归、逻辑回归、贝叶斯分类、支持向量机、K-means聚类、决策树、随机森林以及常用的应用场景整理
- erp采购总监个人总结_erp采购总监总结.docx
- mysql linux导入csv主键,MySQL导入csv文件内容到Table及数据库的自增主键设置
- 【XML】Java对象数据的XML和JSON表示
- 程序代码移植和烧录需要注意什么_法人变更需要注意什么
- 壁纸网站的高清图片,完美符合视觉控的你!
- SpringBoot连接Redis服务出现Command timed out
- DataList控件嵌套,激发内部控件事件
- 佩服Google敏锐和创意!人肉搜索引擎志愿者招募
- docker修改容器ip范围
- 朋友去面试阿里蚂蚁金服测试岗位过程经历
- python编译器哪个最好用_python编写器哪个好用?
- 以讹传讹的小故事大道理
- VBA-自动筛选符合条件的数据
- 苹果手机微信声音小怎么调大声_今天才知道,微信语音隐藏的3个功能,太实用了,看完涨知识了...
热门文章
- mac上git clone报错:error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (e
- 记AAMAS评审意见
- 如何玩转最近爆火的ChatGPT
- 解决win7报计算机内存不足的问题
- 史上最全 | 单目相机测距测速方法大盘点!
- 三角形面积外接圆内切圆
- Linux运维发展如何?哪家培训机构质量高?
- 数据蒋堂 | 中国报表漫谈
- 因为看淡,所以快乐,因为看清所以释然,多一点淡然;多一点豁达;
- 1.直角三角形的判定