530:二叉搜索树的最小绝对差
第一种解法:
先递归(中序遍历)再拿到中序数组之后,再用for循环进行遍历。这个方法还是很简单的。
第二种解法:
双指针法,定义一个pre和一个cur。
用cur遍历,pre紧跟其后。如何能够实现,一前一后的指针,就看中序那里是怎么写的:
cur=pre即可。
class Solution:
def getMinimumDifference(self,root):
pre=TreeNode(None)
self.result=float("inf")
def Traversal(cur):
# global result
if cur==None:
return
Traversal(cur.left)
nonlocal pre
if pre.val!=None:
cc=cur.val
pp=pre.val
diff=abs(cur.val-pre.val)
if diff <self.result:
self.result=diff
pre=cur
Traversal(cur.right)
Traversal(root)
return self.result
501:二叉搜索树中的众数
因为操作的是二叉搜索树,所以要用中序递归遍历,才能够凸显二叉搜索树的性质!从这个题目中,学会使用def init()定义变量的用法,不然后面调用变量的时候会报错的。这个题遍历一遍就可以,主要就是利用了而二叉搜索树的性质。使用双指针实现,只要cur.val!=pre.val了,那就是那就比较现阶段的count有没有超过记录的max,如果没有超过,继续将count归为1,进行下一个元素的遍历。这个题还是需要多刷即便的。
今天还学会了一个写法,那就是 self.result=[cur.val]
,通过这样写,就能起到覆盖之前的self.result中的元素的效果。
class Solution:
def __init__(self):
self.max_res=0
self.conut=0
self.result=[]
self.pre=TreeNode()
def Traversal(self,cur):
if not cur:
return None
self.Traversal(cur.left)
if not self.pre:
self.conut=1
elif self.pre.val==cur.val:
self.conut=self.conut+1
else:
self.conut=1
self.pre=cur
if self.conut==self.max_res:
self.result.append(cur.val)
if self.conut>self.max_res:
self.max_res=self.conut
self.result=[cur.val]
self.Traversal(cur.right)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return None
self.Traversal(root)
return self.result
236:二叉树的最近公共祖先:
明天补上!