给你二叉搜索树的根节点 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. 修剪二叉搜索树 (二叉搜索树-基本操作类)相关推荐

  1. LeetCode 669. 修剪二叉搜索树(Trim a Binary Search Tree)

    669. 修剪二叉搜索树 669. Trim a Binary Search Tree 题目描述 LeetCode LeetCode669. Trim a Binary Search Tree简单 J ...

  2. LeetCode 669. 修剪二叉搜索树

    1. 题目 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R.通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) .你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜 ...

  3. 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!

    单纯移除一个节点那还不够,要修剪! ❞ 669. 修剪二叉搜索树 题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/ 给定 ...

  4. Suzy找到实习了吗 Day23 | 二叉树最后一节!669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

    669. 修剪二叉搜索树 题目 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保 ...

  5. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

  6. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列

    [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...

  7. 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点

    [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...

  8. php实现二叉搜索树,二叉搜索树有几种实现方式

    二叉搜索树有一种实现方式,就是用链表实现,而链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,且链表是由一系列结点组成,结点可以在运行时动态生成. ...

  9. TYVJ P1051 选课 Label:多叉转二叉树形dp(虐心♥)

    描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...

最新文章

  1. 网络负载均衡相关技术-DNS
  2. iOS 宏(define)与常量(const)的正确使用
  3. 杀掉某个进程的 Shell
  4. sip中的100trying到底有啥用
  5. 一卡通vip充值消费线上oracle库服务器故障排查过程
  6. Tensorflow Object detection API 在 Windows10 配置
  7. 简约自适应APP下载页简单源码
  8. Struts2学习笔记(八) 拦截器(Interceptor)(上)
  9. DeepRacer 根据路线计算Action Space RaceLine_Speed_ActionSpace
  10. plsql导出表结构到excel_PLSQL怎样导出oracle表结构
  11. windows10系统精简:NTlite工具
  12. Unity中实现表格功能
  13. 阿里云的短信验证码功能实现
  14. Seaborn绘图-绘制散点图,折线图-分类统计图
  15. 史上最牛最强的linux学习笔记 4.linux常用命令
  16. linux中pe中文名称,原来如此,Linux系统也有PE,不过它叫...
  17. 怎么控制物联网卡的流量使用?
  18. PC微信界面透明度修改美化自制小工具+壁纸1.1
  19. JS–for循环嵌套
  20. 【awk】awk 常用命令

热门文章

  1. FileInputStream、FileReader、FileWriter和File
  2. IE下checkbox或radio隐藏bug
  3. 三阶魔方花样玩法,公式汇总
  4. Linux 入门学习-LINUX基本认识及常用命令
  5. Oracle日期相关
  6. Mathematica笔记
  7. ubuntu更改用户名密码
  8. linux history 历史命令行查询和使用
  9. 如何编译安装wolfssl
  10. FreeRTOS 临界区总结