530.二叉树的最小绝对差值
# 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):
self.vec=[]
def traversal(self,root):
if root is None:
return
self.traversal(root.left)
self.vec.append(root.val)
self.traversal(root.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.vec=[]
self.traversal(root)
if len(self.vec)<2:
return 0
result=float('inf')
for i in range(1,len(self.vec)):
result=min(result,self.vec[i]-self.vec[i-1])
return result
利用中序递增,找到该树最小值
# 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):
self.result=float('inf')
self.pre=None
def traversal(self,cur):
if cur is None:
return
self.traversal(cur.left)
if self.pre is not None:
self.result=min(self.result,cur.val-self.pre.val)
self.pre=cur#记录前一个
self.traversal(cur.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.traversal(root)
return self.result
# 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:
stack =[]
cur=root
pre=None
result=float('inf')
while cur is not None or len(stack)>0:
if cur is not None:
stack.append(cur)
cur=cur.left
else:
cur=stack.pop()
if pre is not None:
result=min(result,cur.val-pre.val)
pre=cur
cur=cur.right
return result
501.二叉搜索树中的众树
如果不是二叉搜索树,把这树遍历,然后用map统计概率
法一 利用字典
# 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
from collections import defaultdict
class Solution:
def searchBST(self,cur,freq_map):
if cur is None:
return
freq_map[cur.val]+=1
self.searchBST(cur.left,freq_map)
self.searchBST(cur.right,freq_map)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
freq_map=defaultdict(int)
result=[]
if root is None:
return result
self.searchBST(root,freq_map)
max_freq=max(freq_map.values())
for key,freq in freq_map.items():
if freq==max_freq:
result.append(key)
return result
利用二叉搜索树性质