651 字
3 分钟
代码随想录算法训练营第十六天 | 二叉树 Part06

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

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

class Solution:
# 这里需要比较相邻节点的值,所以需要 左 -> 根 -> 右 的中序遍历
# 通过维护一个前一个节点 prev 和最小差 res 来计算
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.res = float('inf') # 最小差值,初始为正无穷
self.prev = None # 记录前一个节点
self.traverse(root) # 执行中序遍历
return self.res
def traverse(self, root):
if not root:
return
self.traverse(root.left)
if self.prev:
# 当前节点与前一个节点差值,更新最小差值
self.res = min(self.res, root.val - self.prev.val)
self.prev = root
self.traverse(root.right)

501. 二叉搜索树中的众数#

LeetCode 501. 二叉搜索树中的众数

class Solution:
# 这里需要找到出现次数最多的值,跟前一个节点的值进行比较
def findMode(self, root: Optional[TreeNode]) -> List[int]:
# wid 用于存储出现次数最多的值
self.wid = []
# prev 用于记录前一个节点
self.prev = None
# cur_count 用于记录当前值的出现次数
self.cur_count = 0
# max_count 用于记录出现次数的最大值
self.max_count = 0
self.traverse(root)
return self.wid
def traverse(self, root):
if not root:
return
self.traverse(root.left)
if not self.prev:
# 如果prev是None,说明这是第一个节点,初始化cur_count和max_count
self.cur_count = 1
self.max_count = 1
self.wid.append(root.val)
else:
# 如果prev不是None,比较当前节点和前一个节点的值
if root.val == self.prev.val:
# 如果相等,增加当前值的计数
self.cur_count += 1
if self.cur_count == self.max_count:
# 如果当前计数等于最大计数,添加到结果列表
self.wid.append(root.val)
elif self.cur_count > self.max_count:
# 如果当前计数大于最大计数,更新最大计数并重置结果列表
self.wid = []
self.max_count = self.cur_count
self.wid.append(root.val)
else:
# 如果不相等,重置计数
self.cur_count = 1
if self.cur_count == self.max_count:
# 如果当前计数等于最大计数,添加到结果列表
self.wid.append(root.val)
self.prev = root
self.traverse(root.right)

235. 二叉树的最近公共祖先#

LeetCode 235. 二叉树的最近公共祖先

class Solution:
# 有三种情况:
# 1. 如果 p 和 q 都小于 root,说明最近公共祖先在左子树
# 2. 如果 p 和 q 都大于 root,说明最近公共祖先在右子树
# 3. 否则,当前 root 就是最近公共祖先
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root is None:
return None
# 如果 p 和 q 都在 root 的左子树
if p.val < root.val and q.val < root.val:
return self.lowestCommonAncestor(root.left, p, q)
# 如果 p 和 q 都在 root 的右子树
elif p.val > root.val and q.val > root.val:
return self.lowestCommonAncestor(root.right, p, q)
# 如果 p 和 q 分别在 root 的左右两边,或者有一个等于 root,则 root 就是最近公共祖先
else:
return root
代码随想录算法训练营第十六天 | 二叉树 Part06
https://fuwari.vercel.app/posts/code_musings_day_sixteen/
作者
Jarrett
发布于
2025-06-28
许可协议
CC BY-NC-SA 4.0