代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树,108.将有 序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树
一、669. 修剪二叉搜索树
题目链接:
学习前:
思路:
递归。节点非空时的值与目标区间[low,high]右三种情况
- 节点值小于low----返回递归调用节点右孩子结果,即它右子树剪枝后的根节点
- 节点值大于high----返回递归调用节点左孩子结果,即它左子树剪枝后的根节点
- 节点值在区间中--分别递归调用左孩子右孩子,并将返回值赋值给左孩子右孩子
迭代法费了点时间,还没写出来
学习后:
迭代法思路:
- 首先确定根结点的位置,即找到第一个值在区间内的结点
- 对左子树进行剪枝。当遇到某节点左孩子值小于low时,将该节点左孩子的右孩子节点赋给该节点的左孩子
- 对右子树进行剪枝。当遇到某节点右孩子值大于high时,将该节点右孩子的左孩子节点赋给该节点的左孩子
二、108.将有序数组转换为二叉搜索树
题目链接:
学习前:
思路:
递归。取中间的值作为根节点,遵循左多右少,左闭右开的原则
- 方法参数:int[] nums, int start, int end
- 返回类型:TreeNode
- 终止条件:if(end-start<=0) return null;可将end-start==1也作为终止条件进一步优化
- 单次循环内容:找到左子树数组区间和右子树的数组取钱,分别进行递归调用
学习后:
了解迭代法的思路,相对递归来说麻烦不少
三、538.把二叉搜索树转换为累加树
题目链接:
学习前:
思路:
就是反中序遍历,结点值逐个叠加
学习后:
复习中序遍历
四、学习总结
- 时间:2.5h
- 二叉搜索树的相关操作

浙公网安备 33010602011771号