二叉搜索树的最小绝对差
计算树中任意两点的差的绝对值的最小值(提示:树中至少有两个节点)
二叉搜索树是有序的 用有序数组求
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 getMinmumDifference(self,root):
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
众数
迭代法更好做
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):
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
class Solution:
def findMode(self,root):
st=[]
cur = root
pre = None
maxCount = 0
count = 0
result = []
while cur is not None or st:
if cur is not None:
st.append(cur)
cur = cur.left
else:
cur = st.pop()
if pre is None:
count=1
elif pre.val == cur.val:
count+=1
else:
count =1
if count == maxCount:
result.append(cur.val)
if count>maxCount:
maxCount = count
result=[cur.val]
pre = cur
cur = cur.right
return result