669. 修剪二叉搜索树
学习视频:你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili
学习文档:代码随想录 (programmercarl.com)
学习时间:21:59-22:40
记录时间:22:41-
状态:已听懂|未复写代码|最好复习
这道题可以使用递归方法来解决。下面我将展示递归方法。
- 递归的输入与输出:递归输入的是想要修建的二叉搜索树的根节点,输出的是修建完的二叉搜索树的根节点
- 递归的终止条件:当递归的根节点为空值时,返回None。
- 递归的单层逻辑:判断当前节点的val是否小于修建范围的下限,如果小于,则再次遍历右孩子,并且返回右孩子修建得到的树 。如果val大于修建范围的上线,则遍历左孩子,并且返回左孩子修建得到的树。如果在范围内,则修建其左右孩子,最终返回当前节点。
代码待写。
108.将有序数组转换为二叉搜索树
学习视频:构造平衡二叉搜索树!| LeetCode:108.将有序数组转换为二叉搜索树_哔哩哔哩_bilibili
学习文档:代码随想录 (programmercarl.com)
学习时间:21:20-21:40
记录时间:21:40-21:50
状态:已听懂|未复写代码|最好复习
为了建立平衡二叉树,我们主要将有序数组的中间节点作为根节点。另外本题我们也需要用到区间的不变性,这里我们定义区间是左闭右闭的
- 递归的输入与输出:搜索树输入为有序数组以及其左右开始的索引,输出为二叉搜索树的根节点。
- 递归的终止条件:当左位置比右位置小时,返回空值
- 递归的单层逻辑:首先当前根节点为左索引加右索引整除2,然后该节点的右子树为递归数组的后半段(构造二叉搜索树),左子树为递归数组的前半段(构造二叉搜素树)
代码待写
538.把二叉搜索树转换为累加树
学习视频:普大喜奔!二叉树章节已全部更完啦!| LeetCode:538.把二叉搜索树转换为累加树_哔哩哔哩_bilibili
学习文档:代码随想录 (programmercarl.com)
学习时间:22:30-22:52
记录时间:22:52-
状态:已听懂|未复写代码|最好复习
我们首先需要确定遍历顺序,由于其为从大到小累加,可以理解为从大的开始往小的遍历。故二叉树的遍历为右中左。 然后就简单了,我们设置两个节点,分别是pre与curr,其中pre是全局变量。递归思路如下:
- 递归的输入与输出:递归的输入为需要遍历累加的节点,无输出
- 递归的终止条件:当遍历到空值时,返回空值。
- 递归的单层逻辑:首先递归右子树,然后将目前curr的值加上pre的值(pre始终未curr前一个节点,即较大的节点)。然后将curr的节点给pre,最后递归左子树。这样做正确的原因是右中左在二叉搜索树中遍历得到的是从大到小的数组。
代码待写