代码随想录算法训练营第二十一天| 二叉树part07

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

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

看到要求求最小差值,就意识到需要使用双指针来处理树,我选择使用中序遍历来解决,定义一个全局变量self.pre来作为前一个结点的指针,另一个全局变量diff来更新结点的最小差值。 

代码随想录算法训练营第二十一天| 二叉树part07_第1张图片

 然后看视频在学习一下双指针的细节:

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

看懂了指针行走的顺序就明白了,由于是中序遍历且是二叉搜索树,其数值必定是单调递增的,所以root.val - pre.val的值必不可能为负数,因此就不需要使用abs()了。

501. 二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

这道题恶心到我了,发现统计不唯一的众数在二叉树里操作相当麻烦,改了很多次发现总是有奇奇怪怪的错误,最后参考代码随想录学习一下字典遍历的技巧然后改了才通过。遂看视频学习:

代码随想录算法训练营第二十一天| 二叉树part07_第2张图片

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

看完以后发现这道题也可以用双指针来检查,不断更新count值和result数组,这道题虽然是简单,但是过程和细节其实以及是中等级别的了。

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

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

虽然意识到应该使用后续遍历在回溯过程中搜索,但是写代码时候还是迷迷糊糊的,不知道bug在哪里,遂看视频再学习一遍:

二叉搜索树找祖先就有点不一样了!| 235. 二叉搜索树的最近公共祖先_哔哩哔哩_bilibili

代码随想录算法训练营第二十一天| 二叉树part07_第3张图片

 今天这的题都挺有难度的,非常需要细心。

你可能感兴趣的:(算法)