68. Leetcode 669. 修剪二叉搜索树 (二叉搜索树-基本操作类)
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。示例 1:输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]示例 2:输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3
输出:[3,2,null,1]# 方法一 递归 思路如果当前结点的值小于low,则递归右子树,并返回右子树符合条件的头结点;
如果当前结点的值大于high,则递归左子树,并返回左子树符合条件的头结点。
其目的是想要找到符合区间范围的二叉树节点。if root.val < low:right = self.trimBST(root.right, low, high)return rightif root.val > high:left = self.trimBST(root.left, low, high)return left将下一层处理完左子树的结果赋给root.left,处理完右子树的结果赋给root.right。最后返回root节点。root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)return root# 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 trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:# 递归法if root is None:return Noneif root.val < low:right = self.trimBST(root.right, low, high)return rightif root.val > high:left = self.trimBST(root.left, low, high)return leftroot.left = self.trimBST(root.left, low, high)root.right = self.trimBST(root.right, low, high)return root# 方法二 迭代法 思路迭代法:在进行二叉树剪枝的时候,可以分为三步:1. 将root移动到[low, high]范围内,左闭右闭区间;while root and (root.val < low or root.val > high):if root.val < low:root = root.rightelse:root = root.left2. 剪枝左子树:cur = root
while cur:while cur.left and cur.left.val < low:cur.left = cur.left.rightcur = cur.left3. 剪枝右子树:cur = root
while cur:while cur.right and cur.right.val > high:cur.right = cur.right.leftcur = cur.right# 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 trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:# 迭代法if not root:return rootwhile root and (root.val < low or root.val > high):if root.val < low:root = root.rightelse:root = root.leftcur = rootwhile cur:while cur.left and cur.left.val < low:cur.left = cur.left.rightcur = cur.leftcur = rootwhile cur:while cur.right and cur.right.val > high:cur.right = cur.right.leftcur = cur.rightreturn root
68. Leetcode 669. 修剪二叉搜索树 (二叉搜索树-基本操作类)相关推荐
- LeetCode 669. 修剪二叉搜索树(Trim a Binary Search Tree)
669. 修剪二叉搜索树 669. Trim a Binary Search Tree 题目描述 LeetCode LeetCode669. Trim a Binary Search Tree简单 J ...
- LeetCode 669. 修剪二叉搜索树
1. 题目 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R.通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) .你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜 ...
- 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!
单纯移除一个节点那还不够,要修剪! ❞ 669. 修剪二叉搜索树 题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/ 给定 ...
- Suzy找到实习了吗 Day23 | 二叉树最后一节!669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树
669. 修剪二叉搜索树 题目 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保 ...
- 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...
- 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
[LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...
- 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...
- php实现二叉搜索树,二叉搜索树有几种实现方式
二叉搜索树有一种实现方式,就是用链表实现,而链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,且链表是由一系列结点组成,结点可以在运行时动态生成. ...
- TYVJ P1051 选课 Label:多叉转二叉树形dp(虐心♥)
描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...
最新文章
- 网络负载均衡相关技术-DNS
- iOS 宏(define)与常量(const)的正确使用
- 杀掉某个进程的 Shell
- sip中的100trying到底有啥用
- 一卡通vip充值消费线上oracle库服务器故障排查过程
- Tensorflow Object detection API 在 Windows10 配置
- 简约自适应APP下载页简单源码
- Struts2学习笔记(八) 拦截器(Interceptor)(上)
- DeepRacer 根据路线计算Action Space RaceLine_Speed_ActionSpace
- plsql导出表结构到excel_PLSQL怎样导出oracle表结构
- windows10系统精简:NTlite工具
- Unity中实现表格功能
- 阿里云的短信验证码功能实现
- Seaborn绘图-绘制散点图,折线图-分类统计图
- 史上最牛最强的linux学习笔记 4.linux常用命令
- linux中pe中文名称,原来如此,Linux系统也有PE,不过它叫...
- 怎么控制物联网卡的流量使用?
- PC微信界面透明度修改美化自制小工具+壁纸1.1
- JS–for循环嵌套
- 【awk】awk 常用命令