代码随想录算法训练营第21天 |
代码随想录算法训练营第21天 | 二叉树06:530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
530.二叉搜索树的最小绝对差:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/
代码随想录讲解:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html#算法公开课
501.二叉搜索树中的众数:https://leetcode.cn/problems/find-mode-in-binary-search-tree/description/
代码随想录讲解:
https://programmercarl.com/0501.二叉搜索树中的众数.html#思路
236. 二叉树的最近公共祖先
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/
代码随想录讲解:https://programmercarl.com/0236.二叉树的最近公共祖先.html#算法公开课
530. 二叉搜索树的最小绝对差
题解思路
- 思路一:转为有序数组,寻找列表中最小数
- 思路二:按照中序遍历 设置前后指针
题解代码
class Solution:
def __init__(self):
self.res = float('inf')
self.vec = []
def trans(self,root):
if not root:
return
self.trans(root.left)
self.vec.append(root.val)
self.trans(root.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.trans(root)
for i in range(len(self.vec)-1):
self.res = min(self.vec[i+1]-self.vec[i],self.res)
return self.res
class Solution:
def __init__(self):
self.res = float('inf')
self.pre = None
def trans(self,root):
if not root:
return
self.trans(root.left)
if self.pre:
self.res = min(self.res,abs(root.val-self.pre.val))
self.pre = root
self.trans(root.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.trans(root)
return self.res
501.二叉搜索树中的众数
题解思路
- 思路一:统计map 直接找map中最大的
- 思路二:直接记录当前最大值(利用二叉搜索树的性质)
题解代码
class Solution:
def __init__(self):
self.maxcount = 0
self.res = []
self.currcount = 1
self.pre = None
def trans(self,root):
if not root:
return
self.findMode(root.left)
if root.val == self.pre:
self.currcount = self.currcount+1
else:
self.currcount = 1
if self.maxcount<self.currcount:
self.res = [root.val]
self.maxcount = self.currcount
elif self.maxcount==self.currcount:
self.res.append(root.val)
self.pre = root.val
self.findMode(root.right)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
self.trans(root)
return self.res
236. 二叉树的最近公共祖先
题解思路:
- 后序遍历
- 递归法
- 判断思路:分别在左子树和右子树中找p,q 如果左右两个树都找到了 如果没找到说明继续循环;
题解代码:
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root==q or root==p or not root:
return root
left = self.lowestCommonAncestor(root.left,p,q)
right = self.lowestCommonAncestor(root.right,p,q)
if left and right:
return root
if left and not right:
return left
elif right and not left:
return right
else:
return None

浙公网安备 33010602011771号