530.二叉搜索树的最小绝对差
背景:需要领悟一下二叉树遍历上双指针操作,优先掌握递归
题目链接/文章讲解:代码随想录
视频讲解:二叉搜索树中,需要掌握如何双指针遍历!| LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili
算法思想:暴力解法,通过中序遍历,转变成有序数组做。
更优解法 双指针:设两个指针,cur和pre, 指向当前节点和前一个节点,用cur-pre,结果用result数组保存(result初始值设为int型最大值,因为求最小值),之后result不断和cur-pre比较,如果小的话,result更新替换为更小的那一个,如此递归,直到结束,选出最小值。
应用条件:二叉树求最小值
501.二叉搜索树中的众数
背景:和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。可以先自己做做看,然后看我的视频讲解。
视频讲解:不仅双指针,还有代码技巧可以惊艳到你! | LeetCode:501.二叉搜索树中的众数_哔哩哔哩_bilibili
算法思想:
普通解法:先遍历一遍二叉树(前/中/后续,都行)用map统计每个元素出现的频率,对这些频率排序,方法是把map转换为vector数组,然后找众数
双指针解法:用中序遍历(因为只有用中序遍历,得到的序列才是有序的),设两个指针,cur和pre, 指向当前节点和前一个节点,用Maxcout存最高频率,用count统计单个元素出现的最高频率,(当cur==pre,则count++,其他情况count==1)。result数组放最终的结果,即最高频率。
应用场景:只要是求二叉搜索树的众数,必用中序遍历
236. 二叉树的最近公共祖先
背景:本题其实是比较难的,可以先看我的视频讲解
思路关键词:后序遍历(目的是从下往上遍历,找公共祖先)
使用方法:回溯(有递归就有回溯) ,左子树只要出现P或Q就往上返回,右子树同理
应用场景:自下往上的处理场景可以用回溯