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://www.bilibili.com/video/BV1uR4y1X7qL
538.把二叉搜索树转换为累加树
本题也不难,在 求二叉搜索树的最小绝对差 和 众数 那两道题目 都讲过了 双指针法,思路是一样的。
视频讲解: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