当前位置:网站首页>LC669. 修剪二叉搜索树
LC669. 修剪二叉搜索树
2022-07-01 21:45:00 【996冲冲冲】
迭代
def trimBST(self, root, low, high):
""" :type root: TreeNode :type low: int :type high: int :rtype: TreeNode """
if not root:
return
while root and (root.val < low or root.val > high): #找到合法的root
if root.val < low:
root = root.right
elif root.val > high:
root = root.left
cur = root
while cur:
while cur.left and cur.left.val < low: #找左边不合格的
cur.left = cur.left.right #找到之后左子树所有的都可以丢掉,并且把不合格节点的右子树连接到cur上
cur = cur.left #接着找(根据二叉树的特性没找到就一直往左找)
cur = root
while cur:
while cur.right and cur.right.val > high: #找右边不合格的
cur.right = cur.right.left #找到后右子树的所有都可以丢掉,并且把不合格节点的左子树连接到cur上
cur = cur.right #接着找(根据二叉树的特性没找到就一直往右找)
return root
递归
def trimBST(self, root, low, high): #从根节点开始修剪
""" :type root: TreeNode :type low: int :type high: int :rtype: TreeNode """
if not root:
return
if root.val < low:
return self.trimBST(root.right,low,high) #这里是进行修剪,并且最后返回修剪之后的结果(是先运行递归的语句,最后返回到当前语句时,才会执行return)
# 等价于
# left = self.trimBST(root.right,low,high) #先执行递归,返回到这一句时才会执行下面的那句
# return left
elif root.val > high:
return self.trimBST(root.left,low,high)
root.left = self.trimBST(root.left,low,high) #如果根节点没问题,则递归地修剪左子结点和右子结点
root.right = self.trimBST(root.right,low,high)
return root
递归,相当于自底向上的构建,先把所有的修剪完毕,之后return root时慢慢连接,最后把修剪好的左右子树连接上。
def trimBST(self, root, low, high):
""" :type root: TreeNode :type low: int :type high: int :rtype: TreeNode """
if not root:
return
if root.val >= low: #正常就修剪左子节点和右子节点
root.left = self.trimBST(root.left,low,high)
else: #如果根节点太小,且他的左子树都小于它所以直接返回右子树的修剪结果就行
return self.trimBST(root.right,low,high)
if root.val <= high:
root.right = self.trimBST(root.right,low,high)
else: #如果根节点太大,且他的右子树都大于它所以直接返回左子树的修剪结果就行
return self.trimBST(root.left,low,high)
return root
边栏推荐
- Clean up system cache and free memory under Linux
- 二叉树的基本操作
- In the past 100 years, only 6 products have been approved, which is the "adjuvant" behind the vaccine competition
- EasyExcel 复杂数据导出
- "The silk road is in its youth and looks at Fujian" is in the hot collection of works in the Fujian foreign youth short video competition
- 记录一次spark on yarn 任务报错 Operation category READ is not supported in state standby
- Fundamentals - IO intensive computing and CPU intensive computing
- 名单揭晓 | 2021年度中国杰出知识产权服务团队
- Can you get a raise? Analysis on gold content of PMP certificate
- 完全注解的ssm框架搭建
猜你喜欢

MySQL series transaction log redo log learning notes

Yan Rong looks at how to formulate a multi cloud strategy in the era of hybrid cloud
![[intelligent QBD risk assessment tool] Shanghai daoning brings you leanqbd introduction, trial and tutorial](/img/ac/655fd534ef7ab9d991d8fe1c884853.png)
[intelligent QBD risk assessment tool] Shanghai daoning brings you leanqbd introduction, trial and tutorial

flink sql-client 使用 对照并熟悉官方文档

Copy ‘XXXX‘ to effectively final temp variable

CIO's discussion and Analysis on the definition of high-performance it team
![[NOIP2013]积木大赛 [NOIP2018]道路铺设 贪心/差分](/img/d1/a56231cd4eb3cc1d91d8a55048ccfe.png)
[NOIP2013]积木大赛 [NOIP2018]道路铺设 贪心/差分

Pytest Collection (2) - mode de fonctionnement pytest

91.(cesium篇)cesium火箭发射模拟

MySQL learning notes - SQL optimization of optimization
随机推荐
信标委云原生专题组组长,任重道远!
MySQL之MHA高可用配置及故障切换
地图其他篇总目录
K-means based user portrait clustering model
What is the difference between consonants and Initials? (difference between initials and consonants)
企业架构与项目管理的关联和区别
辅音和声母的区别?(声母与辅音的区别)
从零开始学 MySQL —数据库和数据表操作
Why does blocprovider feel similar to provider?
JS how to get a list of elements in a collection object
详解JMM
PyTorch磨刀篇|argmax和argmin函数
spark analyze命令使用及其作用 map join broadcast join 广播join
MySQL系列之事务日志Redo log学习笔记
Case of camera opening by tour
Unity uses SQLite
函数基本学习之一
Recent public ancestor (LCA) online practices
Spark interview questions
二叉树的基本操作