title: LEETCODE-DAY21
date: 2024-03-12 15:14:32
tags:
今日内容:530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
知识点:二叉搜索树等价于中序遍历结果为递增数组
T1
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
q=deque()
if not root:
return 0
res=root.val
q.append(root)
while q:
temp=q.pop()
if temp.right:
q.append(temp.right)
res=min(res,abs(temp.right.val-temp.val))
if temp.left:
q.append(temp.left)
res=min(res,abs(temp.left.val-temp.val))
return res
输入
root =
[1,null,5,3]
输出
1
预期结果
2
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
q=deque()
if not root:
return 0
res=float('inf')
q.append(root)
while q:
temp=q.pop()
if temp.right:
q.append(temp.right)
res=min(res,abs(temp.right.val-temp.val))
if temp.left:
q.append(temp.left)
res=min(res,abs(temp.left.val-temp.val))
return res
输入
root =
[236,104,701,null,227,null,911]
输出
123
预期结果
9
class Solution:
def inorder(self,root):
if not root:
return []
left=self.inorder(root.left)
right=self.inorder(root.right)
return left+[root.val]+right
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
tra=self.inorder(root)
res=float('inf')
for i in range(len(tra)-1):
res=min(res,abs(tra[i]-tra[i+1]))
return res
二叉搜索树与中序遍历搭配有奇效。
T2
Python | Get key from value in Dictionary
class Solution:
def inorder(self,root):
if not root:
return []
left=self.inorder(root.left)
right=self.inorder(root.right)
return left+[root.val]+right
def findMode(self, root: Optional[TreeNode]) -> List[int]:
Tra=self.inorder(root)
res=list()
table=dict()
for i in Tra:
table[i]=table.get(i,0)+1
value_list=list(table.values())
key_list=list(table.keys())
for key,value in table.items():
if value==max(value_list):
res.append(key)
return res
暴力解法,时间复杂度高
简便解法后补(可以在遍历的同时就统计出现频率)
T3
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root or root==q or root==p:
return root
left=self.lowestCommonAncestor(root.left,p,q)
right=self.lowestCommonAncestor(root.right,p,q)
if left and right:
return root
if not left and right:
return right
elif left and not right:
return left