669. 修剪二叉搜索树
这道题目比较难,比 添加节点和删除节点难的多,建议先看视频理解。
题目链接/文章讲解: 代码随想录
视频讲解: 你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili
note:不能盲目删除,以小于min的节点为例,该被删小节点的右子树中的节点很可能会满足要求,因此会被误杀而导致不正确。当然本题也没有必要去重构!--> 还是“递归法”!
108.将有序数组转换为二叉搜索树
本题就简单一些,可以尝试先自己做做。
视频讲解:构造平衡二叉搜索树!| LeetCode:108.将有序数组转换为二叉搜索树_哔哩哔哩_bilibili
本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。
Ans:分割点就是数组中间位置的节点。
Q:如果数组长度为偶数,中间节点有两个,取哪一个?
A:取哪一个都可以,只不过构成了不同的平衡二叉搜索树。
核心思想:分治思想(mergesort)
538.把二叉搜索树转换为累加树
本题也不难,在 求二叉搜索树的最小绝对差 和 众数 那两道题目 都讲过了 双指针法,思路是一样的。
视频讲解:普大喜奔!二叉树章节已全部更完啦!| LeetCode:538.把二叉搜索树转换为累加树_哔哩哔哩_bilibili
思路:这是一棵二叉搜索树(有序)
那么有序的元素如何求累加呢?
其实这就是一棵树,大家可能看起来有点别扭,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],是不是感觉这就简单了。
Q:为什么变成数组就是感觉简单了呢?
A:因为数组大家都知道怎么遍历啊,从后向前,挨个累加就完事了,这换成了二叉搜索树,看起来就别扭了一些是不是。
那么知道如何遍历这个二叉树,也就迎刃而解了,从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了。
总结篇
好了,二叉树大家就这样刷完了,做一个总结吧!