力扣算题Day20

98.验证二叉搜索树(了解二叉树的性质,才是编写此道题代码的基础)

        做题伤着了:这道题我做的时候,看到别人写的代码很长,懒得看,直接干。自己编写代码,没有了解平衡二叉树的性质,然后出现了下图[0,-1]、[0]的错误。我继续头铁,消灭这些错误。当我看到第三个错误的时候,我知道我错了,方向错了,改的思路都没了。

         错误代码:

class Solution:
    def isValidBST(self, root):
        if root and not root.left and not root.right :
           return True

        if   root.right:
            if not root.left  and root.right.val<=root.val:
            # if root.right.val<=root.val:
                return False
        if root.left:
            if  not root.right and root.left.val >= root.val:
                return False

        def trval(root):
            if not root.left :
                return

            # while root.left.val:
                print(root.val)
                print(root.left.val)
            if root.left.val >=root.val:
                return False
            if not root.right:
                return
            if root.right.val <=  root.val:
                return False

            trval(root.left)
            trval(root.right)

        if trval(root)==False :
            return False
        else:
            return True

        掌握规律后,秒解决:

         掌握上述规律,直接手撕代码(中序遍历+循环——》解决战斗)-----》秒解决,不过出现了一个错误。

        代码如下:

class Solution:
    def isValidBST(self, root):
        ddd=[]
        def trval(root):
            if not root:
                return
            trval(root.left)
            ddd.append(root.val)
            trval(root.right)
        trval(root)
        d_length=len(ddd)
        print(ddd)
        for i in range(1,d_length):
            if ddd[i-1]>=ddd[i]:
                return False

        return True
        还有其他方法,时间不够,二刷再做。

 530.二叉搜索树的最小绝对差 

        会了上一道题,这道题直接秒了。

class Solution:
    def getMinimumDifference(self, root):
        ddd=[]
        def trval( root):
            if not root:
                return
            trval(root.left)
            ddd.append(root.val)
            trval(root.right)
        trval(root)
        d_length=len(ddd)
        print(ddd)
        tt=[]
        for i in range(1,d_length):
            tt.append(ddd[i]-ddd[i - 1])
        return min(tt)

        还有其他方法,时间不够,二刷再做。

 501.二叉搜索树中的众数 

        方法一(开了新的内存):   

class Solution:
    def findMode(self, root: Optional[TreeNode]) -> List[int]:

        ddd = []

        def trval(root):
            if not root:
                return
            trval(root.left)
            ddd.append(root.val)
            trval(root.right)

        trval(root)
        
        ########使用对数组处理的方法
        d = dict()

        for item in ddd:
            if item in d.keys():
                d[item] += 1
            else:
                d[item] = 1
        print(d)

        def find_key(dict_input):
            list_key = []
            dict_key=list(dict_input.keys())
            dict_value=list(dict_input.values())
            for i in range(len(dict_key)):
                if dict_value[i] == max(dict_value):
                    list_key.append(dict_key[i])
            return list_key

        list_key = find_key(d)
        return list_key

        方法二(双指针):

 

 

 运行代码: 

class Solution:
    def __init__(self):
        self.pre=TreeNode()
        self.count=0
        self.bijiao=0
        self.cuncu=[]
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        self.bianli(root)
        return self.cuncu
    def bianli(self,root):
        if not root:
            return
        self.bianli(root.left)
        cur=root
        if not self.pre:
            self.count=1
        elif self.pre.val==cur.val:
            self.count+=1
        else:
            self.count = 1
        if self.count>self.bijiao:
            self.cuncu=[cur.val]
            self.bijiao=self.count
        elif self.count==self.bijiao:
                self.cuncu.append(cur.val)
        self.pre=cur
        self.bianli(root.right)
class Solution:
    def __init__(self):
        self.pre=TreeNode()
        self.count=0
        self.bijiao=0
        self.cuncu=[]
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return
        self.findMode(root.left)
        cur=root
        if not self.pre:
            self.count=1
        elif self.pre.val==cur.val:
            self.count+=1
        else:
            self.count = 1
        if self.count>self.bijiao:
            self.cuncu=[cur.val]
            self.bijiao=self.count
        elif self.count==self.bijiao:
                self.cuncu.append(cur.val)
        self.pre=cur
        self.findMode(root.right)
        return self.cuncu


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值