代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树,108.将有 序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

一、669. 修剪二叉搜索树

题目链接:

LeetCode 669. 修剪二叉搜索树

学习前:

思路:

递归。节点非空时的值与目标区间[low,high]右三种情况

  1. 节点值小于low----返回递归调用节点右孩子结果,即它右子树剪枝后的根节点
  2. 节点值大于high----返回递归调用节点左孩子结果,即它左子树剪枝后的根节点
  3. 节点值在区间中--分别递归调用左孩子右孩子,并将返回值赋值给左孩子右孩子

迭代法费了点时间,还没写出来

学习后:

迭代法思路:

  1. 首先确定根结点的位置,即找到第一个值在区间内的结点
  2. 对左子树进行剪枝。当遇到某节点左孩子值小于low时,将该节点左孩子的右孩子节点赋给该节点的左孩子
  3. 对右子树进行剪枝。当遇到某节点右孩子值大于high时,将该节点右孩子的左孩子节点赋给该节点的左孩子

二、108.将有序数组转换为二叉搜索树

题目链接:

LeetCode 108.将有序数组转换为二叉搜索树

学习前:

思路:

递归。取中间的值作为根节点,遵循左多右少,左闭右开的原则

  1. 方法参数:int[] nums, int start, int end
  2. 返回类型:TreeNode
  3. 终止条件:if(end-start<=0) return null;可将end-start==1也作为终止条件进一步优化
  4. 单次循环内容:找到左子树数组区间和右子树的数组取钱,分别进行递归调用

学习后:

了解迭代法的思路,相对递归来说麻烦不少

三、538.把二叉搜索树转换为累加树

题目链接:

LeetCode 538.把二叉搜索树转换为累加树

学习前:

思路:

就是反中序遍历,结点值逐个叠加

学习后:

复习中序遍历

四、学习总结

  1. 时间:2.5h
  2. 二叉搜索树的相关操作
posted @   amulet  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示