530.二叉搜索树的最小绝对差
https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html
牢记二叉搜索树是有序的!!!
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
ordered = self.convert2array(root)
min_diff = float('inf')
for i in range(len(ordered)):
if i < len(ordered)-1:
min_diff = min(abs(ordered[i+1] - ordered[i]), min_diff)
return min_diff
def convert2array(self,root):
if not root:
return []
left = self.convert2array(root.left)
right = self.convert2array(root.right)
return left + [root.val] + right
501.二叉搜索树中的众数
class Solution:
def findMode(self, root: Optional[TreeNode]) -> List[int]:
ordered = self.convert2array(root)
most = 0
result = []
for i in range(len(ordered)):
cur = sum([1 for j in ordered[i+1:] if j == ordered[i]])
if cur == most:
result.append(ordered[i])
elif cur > most:
most = cur
result = [ordered[i]]
return result
def convert2array(self,root):
if not root:
return []
left = self.convert2array(root.left)
right = self.convert2array(root.right)
return left + [root.val] + right
236. 二叉树的最近公共祖先
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
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