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

    Problem:

    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:

        2
       / 
      1   3
    
    Input: [2,1,3]
    Output: true
    

    Example 2:

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

    思路 1

    Solution I (C++):

    public:
        bool isValidBST(TreeNode* root) {
            TreeNode *prev = NULL;
            return is_valid(root, prev);
        }
    private:
        bool is_valid(TreeNode* root, TreeNode* &top) {
            if (root == NULL)  return true;
            if (!is_valid(root->left, top))  return false;
            if (top && top->val >= root->val)  return false;
            top = root;
            return is_valid(root->right, top);
        }
    

    性能

    Runtime: 16 ms  Memory Usage: 20.6 MB

    思路 2

    判断一个节点为根节点的左儿子还是右儿子,然后与根节点比较大小。

    Solution II (C++):

    public:
        bool isValidBST(TreeNode* root) {
            return isValidBST(root, NULL, NULL);
        }
    private:
        bool isValidBST(TreeNode* node, TreeNode* is_lchild, TreeNode* is_rchild) {
            if (!node)  return true;
            if (is_lchild && node->val >= is_lchild->val || is_rchild && node->val <= is_rchild->val)  return false;
            return isValidBST(node->left, node, is_rchild) && isValidBST(node->right, is_lchild, node);
        }
    

    性能

    Runtime: 20 ms  Memory Usage: 20.6 MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    文件系统之磁盘配额
    mysql之基础操作
    mysql-两种方式安装
    文件系统之parted 分区
    JDK1.7配置及测试
    ASP.NET中处理自定义错误的最佳方式
    C#使用System.Data.SQLite操作SQLite
    C#判断ip地址是否ping的通
    C#的WinForm中制作饼状图和柱状图
    使用.net(C#)发送邮件学习手册(带成功案例)
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12323683.html
Copyright © 2011-2022 走看看