651 字
3 分钟
代码随想录算法训练营第十六天 | 二叉树 Part06
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. 二叉搜索树中的众数
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. 二叉树的最近公共祖先
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/