zoukankan      html  css  js  c++  java
  • 算法——dfs 判断是否为BST

    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的算法模板:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Solution():
       last_node = None
       result = None
        
       def run(self, root):
            self.dfs(root)
            return self.result
        
       def dfs(self):
           if last_node is None:
               last_node = root
           else:
               do_sth(last_node, root)
                
           dfs(root.left)
     
           dfs(root.right)
  • 相关阅读:
    VC编程规范
    socket编程FTP客户端demo
    Win7下微软拼音等中文输入法默认英文标点解决办法
    <转载>一般筛法和快速线性筛法求素数
    聚类算法的设计与实现
    面试题集锦_7
    面试题集锦_8
    中点画线算法程序
    HTML解析类 ,让你不使用正则也能轻松获取HTML相关元素 C# .NET
    .NET C# 使用S22.Imap.dll接收邮件 并且指定收取的文件夹的未读邮件,并且更改未读准态
  • 原文地址:https://www.cnblogs.com/bonelee/p/11610047.html
Copyright © 2011-2022 走看看