代码随想录算法训练营第n天|98.验证二叉搜索树

文章介绍了如何通过递归和数组法来验证二叉搜索树的有效性,强调了中序遍历的重要性以及在验证过程中节点值的比较规则。
摘要由CSDN通过智能技术生成

98. 验证二叉搜索树

  1. 有效二叉搜索树的定义
    节点的左子树只包含 小于 当前节点的数。
    节点的右子树只包含 大于 当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。

  2. 解题思路

    • 因为二叉搜索树的特性,一定要想到中序遍历
    • 其次是要注意不能单纯的比较左节点小于中间节点,右节点大于中间节点 ,而是左子树所有节点小于中间节点,右子树所有节点大于中间节点;
    • 递归解法需要注意,有布尔型返回值,所以遇到不符合条件的返回False,否则继续递归遍历下去。
  3. 代码如下:
    递归法:

    class Solution(object):
        def __init__(self):
            self.maxValue = float('-inf')
        def isValidBST(self, root):
            """
            :type root: TreeNode
            :rtype: bool
            """
            #递归 使用中序
            #终止条件
            if not root: return True
            left = self.isValidBST(root.left)#左
            #如果中根节点值是从小到大则继续,否则验证结果是False
            if root.val > self.maxValue:#中
                self.maxValue=root.val
            else:
                return False
            right = self.isValidBST(root.right)
            #如果左右节点值相等,也是False
            if left == right:
                return False 
            else:
                return True    
    

    递归+数组法:

    class Solution(object):
        def isValidBST(self, root):
            
            """
            :type root: TreeNode
            :rtype: bool
            """
            res=[]
            self.get_array(root,res)
            print(res)
            for i in ranage(1,len(res)):
                if res[i] <= res[i-1]:
                    return False    
            return True
            
        def get_array(self,root,res):
    		#中序遍历
            if root is None :return 
            left = self.get_array(root.left,res)
            res.append(root.val)
            right = self.get_array(root.right,res)
    
           
    
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值