第二十天 | 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 

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

迭代法:用stack写有些麻烦,可以利用二叉搜索树的性质,最大和最小的节点都在最边上,只要把最边上超出范围的节点修剪去即可,不比遍历所有节点。不过这里最好用一个虚拟头结点才好处理。

递归法:如果当前节点超出右边界,就返回左节点;如果超出左边界,就返回右节点;如果不超出边界,就对左右节点递归使用函数。

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

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

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

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

思路:如果转为递增序列,这就很容易。只要从后往前累加就好。但用中序遍历转为递增序列,从后往前累加还是不方便。可以用右中左逆中序遍历转为递减序列。这样只要从前往后累加就好了。

总结篇 

以下是卡哥资料

 669. 修剪二叉搜索树 

这道题目比较难,比 添加增加和删除节点难的多,建议先看视频理解。

题目链接/文章讲解: https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html 

视频讲解: https://www.bilibili.com/video/BV17P41177ud 

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

本题就简单一些,可以尝试先自己做做。

https://programmercarl.com/0108.%E5%B0%86%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html 

视频讲解:https://www.bilibili.com/video/BV1uR4y1X7qL 

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

本题也不难,在 求二叉搜索树的最小绝对差 和 众数 那两道题目 都讲过了 双指针法,思路是一样的。

https://programmercarl.com/0538.%E6%8A%8A%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E8%BD%AC%E6%8D%A2%E4%B8%BA%E7%B4%AF%E5%8A%A0%E6%A0%91.html 

视频讲解:https://www.bilibili.com/video/BV1d44y1f7wP

 总结篇  

好了,二叉树大家就这样刷完了,做一个总结吧

https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E6%80%BB%E7%BB%93%E7%AF%87.html 

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容