LeetCode 530. 二叉搜索树的最小绝对差
题目链接:530. 二叉搜索树的最小绝对差 - 力扣(LeetCode)
思路:
一开始我以为两个点要有父子关系,也就是相连,所以做错了。正确的做法是初始化一个res来存最小的差值,然后递归来计算。
代码:
#python 写错了的版本
# 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 getMinimumDifference(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
def helper(node):
if node.left:
self.res = min(self.res, node.val - node.left.val)
helper(node.left)
if node.right:
self.res = min(self.res, node.right.val - node.val)
helper(node.right)
helper(root)
return self.res
def __init__(self):
self.res = float('inf')
#python 正确版本 我们注意一直比对一个最小的self.res就好
# 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 getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.traversal(root)
return self.res
def __init__(self):
self.res = float('inf')
self.pre = None
def traversal(self, cur):
if not cur:
return
self.traversal(cur.left)
if self.pre:
self.res = min(self.res, cur.val - self.pre.val)
self.pre = cur
self.traversal(cur.right)
LeetCode 501. 二叉搜索树中的众数
题目链接:501. 二叉搜索树中的众数 - 力扣(LeetCode)
思路:
朴素的想法:使用一个hashmap来存出现的元素及其频次,然后对hashmap进行排序,取一个最大的输入res中,遍历一下hashmap,如果有频次与第一个相同的,则也是满足结果要求的众数,我们也要把其键值也就是该数放入res中。
代码:
#python
# 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 findMode(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
def helper(node):
if not node:
return
self.hashmap[node.val] = self.hashmap.get(node.val, 0) + 1
helper(node.left)
helper(node.right)
helper(root)
sorted_hashmap = sorted(self.hashmap.items(), key=lambda x: x[1], reverse=True)
max_count = sorted_hashmap[0][1]
res = []
for key, count in sorted_hashmap:
if count == max_count:
res.append(key)
else:
break
return res
def __init__(self):
self.res = []
self.hashmap = {}
LeetCode 236. 二叉树的最近公共祖先
题目链接:236. 二叉树的最近公共祖先 - 力扣(LeetCode)
思路:
递归再递归。
代码:
#python
class Solution:
def lowestCommonAncestor(self, root, p, q):
if root == q or root == p or root is None:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if left is not None and right is not None:
return root
if left is None and right is not None:
return right
elif left is not None and right is None:
return left
else:
return None