Day21 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
530.二叉搜索树的最小绝对差
需要领悟一下二叉树遍历上双指针操作,优先掌握递归
题目链接/文章讲解:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html
视频讲解:https://www.bilibili.com/video/BV1DD4y11779
思考
中序遍历的同时,用pre记录一下上一个节点。
class Solution:
def __init__(self):
self.min_num = float('inf')
self.pre = None
def traversal(self,root):
if root is None:
return
self.traversal(root.left)
if self.pre:
self.min_num = min(self.min_num,root.val - self.pre.val)
self.pre = root
self.traversal(root.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.traversal(root)
return self.min_num
501.二叉搜索树中的众数
和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。
可以先自己做做看,然后看我的视频讲解。
https://programmercarl.com/0501.二叉搜索树中的众数.html
视频讲解:https://www.bilibili.com/video/BV1fD4y117gp
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.res = []
self.max_freq = 0
self.count = 0
self.pre = None
def traversal(self,root):
if root is None:
return
self.traversal(root.left)
if self.pre:
if root.val == self.pre.val:
self.count+=1
else:
self.count = 1
if self.count>self.max_freq:
self.res.clear()
self.max_freq = self.count
self.res.append(root.val)
elif self.count == self.max_freq:
self.res.append(root.val)
#print(self.res)
else:
self.count=1
self.max_freq = self.count
self.res.append(root.val)
self.pre = root
self.traversal(root.right)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
self.traversal(root)
return self.res
236. 二叉树的最近公共祖先
本题其实是比较难的,可以先看我的视频讲解
https://programmercarl.com/0236.二叉树的最近公共祖先.html
视频讲解:https://www.bilibili.com/video/BV1jd4y1B7E2
思考
这道题确实有一些难度。通过后序遍历递归返回最近公共祖先。

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root == p or root == q or root is None:
return root
left = self.lowestCommonAncestor(root.left,p,q)
right = self.lowestCommonAncestor(root.right,p,q)
if left is None and right:
return right
elif left and right is None:
return left
elif left and right:
return root
else:
return None
浙公网安备 33010602011771号