首页 > 编程语言 >算法——dfs 判断是否为BST

算法——dfs 判断是否为BST

时间:2023-05-30 22:06:42浏览次数:47  
标签:val BST self dfs 二叉 算法 查找 root 节点

95. 验证二叉查找树

中文English

给定一个二叉树,判断它是否是合法的二叉查找树(BST)

一棵BST定义为:

  • 节点的左子树中的值要严格小于该节点的值。
  • 节点的右子树中的值要严格大于该节点的值。
  • 左右子树也必须是二叉查找树。
  • 一个节点的树也是二叉查找树。

Example

样例 1:

输入:{-1}
输出:true
解释:
二叉树如下(仅有一个节点):
	-1
这是二叉查找树。

样例 2:

输入:{2,1,4,#,#,3,5}
输出:true
解释:
	二叉树如下:
	  2
	 / \
	1   4
	   / \
	  3   5
这是二叉查找树。
"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""

class Solution:
    """
    @param root: The root of binary tree.
    @return: True if the binary tree is BST, or false
    """
    _is_bst = True
    _last_val = -float('inf')
    
    def isValidBST(self, root):
        # write your code here
        self.helper(root)
        return self._is_bst
        
    def helper(self, root):
        if not root:
            return
        self.helper(root.left)
        if root.val <= self._last_val:
            self._is_bst = False # return
        self._last_val = root.val
        self.helper(root.right)

  

需要在遍历中记住上次遍历节点,根据上次的节点和当前节点进行比较而得到result的算法模板:

标签:val,BST,self,dfs,二叉,算法,查找,root,节点
From: https://blog.51cto.com/u_11908275/6382262

相关文章

  • 排列算法问题
    |类循环排列#treeDFSdefloop_permutation(arr,depth,path,result):ifdepth==len(arr):result.append(list(path))returnforninarr:path.append(n)loop_permutation(arr,depth+1,path,result)path.pop(......
  • MongoDB C++ gridfs worked example
    使用libmongoc,参考:http://mongoc.org/libmongoc/current/mongoc_gridfs_t.html#include<mongoc.h>#include<stdio.h>#include<stdlib.h>#include<fcntl.h>classMongoGridFS{public:MongoGridFS(constchar*db);~MongoGridFS();......
  • 文心一言 VS 讯飞星火 VS chatgpt (26)-- 算法导论5.1 1题
    一、证明:假设在过程HIRE-ASSISTANT的第4行中,我们总能决定哪一个应聘者最佳。则意味着我们知道应聘者排名的全部次序。文心一言:证明:假设在过程HIRE-ASSISTANT的第4行中,我们总能决定哪一个应聘者最佳。则意味着我们知道应聘者排名的全部次序。在HIRE-ASSISTANT的第......
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是抽象工厂模式?一句话解释:  通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问。抽象工厂模式(AbstractFactoryPattern)是一种创建型模式。它用于创建一组相关对象的家族。强调的是一组对象之间的协作关系,而不是单个对象之......
  • 【无人机三维路径规划】基于蚁群算法实现无人机三维路径规划含Matlab代码
    ⛄内容介绍随着无人机可执行任务的多样化,航迹规划成为其顺利完成任务的基本前提。针对该问题,提出了基于蚁群算法的无人机航迹规划方法。运用等效地形模拟方法,将作战区域中的敌方威胁、地形障碍等效为山峰,构建了无人机航迹规划的场景。以此为基础,采用抽象蚁群,对起始点和终点已知的......
  • 算法刷题记录:[NOIP2017]图书管理员
    题目链接https://ac.nowcoder.com/acm/contest/19306/1050题目分析因为要求最小编号,并且该编号是以读者的编号结尾,这边直接排序+翻转,找开头的数。记录是因为看到某个大佬非常好的思路,直接对编号进行取模,就是末尾的数。如果想得到末尾的数,直接进行取模即可~~AC代码#include<......
  • 第五课 朴素贝叶斯算法
       朴素贝叶斯算法是机器学习中目前一个还在使用的算法,其依托于贝叶斯公式的概率计算,可用于NLP等分类任务。朴素贝叶斯算法的朴素,是因为其有2个较强或较主观的前提假设:样本间的特征(属性)是相互独立的样本特征(属性)取值服从高斯(正态)分布   由于自然界的数据分......
  • 算法刷题记录:译码
    题目链接https://ac.nowcoder.com/acm/contest/19306/1046解题思路:10进制转x进制,只要反复%x、/x即可。%x取出末尾的数字,因为末尾的数字已经取出,所以将该数字\掉可以一起算也可以循环,取模不会影响除数。AC代码#include<iostream>usingnamespacestd;intT,n;//将......
  • ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
    [root@localhostPaddleOCR]#strings/lib64/libstdc++.so.6|grep'CXXABI'CXXABI_1.3CXXABI_1.3.1CXXABI_1.3.2CXXABI_1.3.3CXXABI_1.3.4CXXABI_1.3.5CXXABI_1.3.6CXXABI_1.3.7CXXABI_TM_1[root@localhostPaddleOCR]#find/-name"libstdc++.......
  • IO调度算法的简单学习与整理
    IO调度算法的简单学习与整理前言前几天整理了/sys/block/sda/queue/nr_requests以及/sys/block/sda/device/queue_depth的两个参数#没别的意思我就是再背一遍,怕自己记性不好记不住.其实队列数量和队列参数之外还有一些调度算法.所以今天想继续研究一下IO的调度算......