代码随想录算法训练营|day32
530.二叉搜索树的最小绝对差
题目描述:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
题目难度:简单
时间复杂度:O(n);空间复杂度:O(1)
下面展示 代码
:
# 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) -> None:
self.res = float('Inf')
self.pre = None
def travel(self, cur):
# 中序遍历
if cur == None:
return
self.travel(cur.left)
if self.pre != None:
self.res = min(self.res, cur.val - self.pre.val)
self.pre = cur
self.travel(cur.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.travel(root)
return self.res
501.二叉搜索树中的众数
题目描述:给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
题目难度:简单
时间复杂度:O(n);空间复杂度:O(1)
代码
如下
from collections import defaultdict
class Solution:
def search(self, cur, dic):
if cur == None:
return
dic[cur.val] += 1
self.search(cur.left, dic)
self.search(cur.right, dic)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
dic = defaultdict(int)
res = []
if root == None:
return res
self.search(root, dic)
max1 = max(dic.values())
for key, value in dic.items():
if value == max1:
res.append(key)
return res
236. 二叉树的最近公共祖先
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
题目难度:中等
时间复杂度:O(n);空间复杂度:O(1)
代码
如下
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.pre = 0
self.travel(root)
return root
def travel(self, current):
# 中序遍历的反遍历
if current == None:
return
self.travel(current.right)
current.val += self.pre
self.pre = current.val
self.travel(current.left)