zoukankan      html  css  js  c++  java
  • 98. Validate Binary Search Tree

    这是leetcode邮件推送的题目,bug-free的代码还是需要debug一段时间的

    Given a binary tree, determine if it is a valid binary search tree (BST).

    Assume a BST is defined as follows:

    • The left subtree of a node contains only nodes with keys less than the node's key.
    • The right subtree of a node contains only nodes with keys greater than the node's key.
    • Both the left and right subtrees must also be binary search trees.

    Example 1:

    Input:
        2
       / 
      1   3
    Output: true
    

    Example 2:

        5
       / 
      1   4
         / 
        3   6
    Output: false
    Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value
                 is 5 but its right child's value is 4.

    注意指针的引用 TreeNode* &pre
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    private:
        bool validate(TreeNode* root,TreeNode* &pre){
            if(root==nullptr)
                return true;
            //cout<<"root->val: "<<root->val<<endl;
            if(!validate(root->left,pre))
                return false;
            if(pre!=nullptr && (pre->val>=root->val))
                return false;
            pre=root; 
            
            return validate(root->right,pre);
            
        }
    public:
        bool isValidBST(TreeNode* root) {
            TreeNode* pre=nullptr;
            return validate(root,pre); 
        }
    };

    python代码

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def isValidBST(self, root, largerThan=float('-inf'), lessThan=float('inf')):
            """
            :type root: TreeNode
            :rtype: bool
            """
            if not root:
                return True
            if root.val <= largerThan or root.val >= lessThan:
                return False
    
            return self.isValidBST( root.left, largerThan, min(lessThan, root.val)) and 
                   self.isValidBST(root.right, max(largerThan, root.val), lessThan)
                      
  • 相关阅读:
    HDU1412:{A} + {B}
    [置顶] 写好最简单的冒泡排序
    python scrapy 基础
    hdu2531之BFS
    Direct3D 11的流水线
    Direct3D 11的资源
    Perl 多线程模块 Parallel::ForkManager
    POJ 3450 Corporate Identity (KMP+暴搞)
    hdu 2853
    我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
  • 原文地址:https://www.cnblogs.com/learning-c/p/9280368.html
Copyright © 2011-2022 走看看