leetcode算法训练十八天|530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差

学习视频:二叉搜索树中,需要掌握如何双指针遍历!| LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili

学习文档:代码随想录 (programmercarl.com)

学习时间:21:30-22:06

记录时间:22:06

状态:已听懂|未复写代码|最好复习

1. 看到问题后的初始想法与看完随想录后的心得 

        时间最近比较急,先放弃复现代码,仅仅看了卡哥的代码视频并记录下对于方法的理解。

对于二叉搜索树,我们依旧使用中序遍历的递归方式来进行操作,只需要计算得出两个相邻节点的绝对差的最小值即可,递归三部曲如下:

  1. 递归函数的输入与输出:递归函数的输入是当前节点,递归函数不需要输出(已经定义了全局变量才存取最小值)
  2. 递归函数的终止条件:当遍历节点为空时返回null
  3. 递归函数的单层逻辑:首先遍历左子树,然后遍历中间节点,计算中间节点与上一个节点pre(全局变量)的差,如果是最小的则更新全局遍历result。接下来给pre赋值为当前节点,再遍历右子树。

代码待补。

501.二叉搜索树中的众数

学习视频:不仅双指针,还有代码技巧可以惊艳到你! | LeetCode:501.二叉搜索树中的众数_哔哩哔哩_bilibili

学习文档:代码随想录 (programmercarl.com)

学习时间:22:30-23:06

记录时间:23:06

状态:已听懂|未复写代码|最好复习

 1. 看到问题后的初始想法与看完随想录后的心得 

        本题只需要遍历一次二叉树就可以知道众数结果。

  1. 递归函数的输入与输出:递归函数的输入是当前节点,递归函数不需要输出(已经定义了全局变量才存取count,maxcount,result)
  2. 递归函数的终止条件:当遍历节点为空时返回null
  3. 递归函数的单层逻辑:首先遍历左子树,然后遍历中间节点,如果pre为空则令count为1,并且pre等于curr。如果pre的值和curr的值相同,那就令count+1,如果curr的值不等于pre,那就count=1.如果count等于maxcount,则令result加入count。如果count大于maxcount,则清空result并加入当前节点的val。

代码待补。

236. 二叉树的最近公共祖先

学习视频:​​​​​​​自底向上查找,有点难度! | LeetCode:236. 二叉树的最近公共祖先_哔哩哔哩_bilibili

学习文档:代码随想录 (programmercarl.com)

学习时间:18:00-18:13

记录时间:18:14

状态:已听懂|未复写代码|最好复习

 1. 看到问题后的初始想法与看完随想录后的心得 

        解决这道题我们需要使用后序遍历,即先遍历左右两个子树,再根据左右两个子树的情况来判断是否需要对中间节点处理。递归的逻辑如下:

  1. 递归的输入与输出:递归输入需要遍历的节点,输出空值或者树节点
  2. 递归的终止条件:当递归遍历到空节点,返回空节点。当递归遍历到目标节点,返回目标节点(即当前根节点)
  3. 递归的单层逻辑:首先遍历左子树(若存在目标节点,会有返回值),然后遍历右子树(若存在目标节点,会有返回值)。如果左右子树返回值均不为空值,则返回当前节点的数值(此时为公共祖先)。如果左子树为空,右子树不为空,则返回右子树的遍历得到的节点(可能是公共祖先,也可能是匹配到的节点)。若左子树不为空,右子树为空,则返回左子树的遍历得到的节点。

代码待补。

你可能感兴趣的:(算法,leetcode,数据结构)