530. 二叉搜索树的最小绝对差
题目
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。
solution
# 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 traversal(self,node,record):
if node==None:return
record.append(node.val)
self.traversal(node.left,record)
self.traversal(node.right,record)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
record=[]
self.traversal(root,record)
record.sort()
print(record)
gap=[]
for i in range(1,len(record)):
gap.append(record[i]-record[i-1])
print(gap)
return min(gap)
501. 二叉搜索树中的众数
题目
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
solution
# 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 traversal(self,node,record):
if node==None:return
self.traversal(node.left,record)
record.append(node.val)
self.traversal(node.right,record)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
record=[]
self.traversal(root,record)
fre=dict()
for i in record:
if i in fre:
fre[i]+=1
else:
fre[i]=1
sorted_fre=sorted(fre.items(),key=lambda item:item[1])
res=[]
maxfre=sorted_fre[-1][1]
print(fre)
for i in fre:
if fre[i]==maxfre:
res.append(i)
return res
236. 二叉树的最近公共祖先
题目
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
solution
这道题好难,递归好难哦
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def search_traversal(self,tree,p,q):
# 一开始将返回值设置为t/f,自己很混乱
# 确定返回值,返回的是node(有返回值/无返回值)
#if tree.left==None and tree.right==None:#为什么要以是叶子节点作为标准笨蛋!
if tree==None:return tree
if tree==p or tree==q:return tree
# 这样就包含了那个特殊情况(看视频)
# 后序遍历
left_res=self.search_traversal(tree.left,p,q)
right_res=self.search_traversal(tree.right,p,q)
if left_res!=None and right_res!=None:
return tree
elif left_res!=None and right_res==None:
return left_res # 返回给根节点,目的是让根节点对应的search function返回值不为空就可以了
elif left_res==None and right_res!=None:
return right_res
else:
return None
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
res=self.search_traversal(root,p,q)
return res