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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    关于《注意力模型--Attention注意力机制》的学习
    神经网络参数计算
    FPN(feature pyramid networks)算法讲解
    RetinaNet-focal loss
    论文阅读: RetinaNet
    CNN+LSTM:看图说话
    非极大值抑制-NMS
    python IO文件操作 file文件操作
    软件测试定义 分类
    软件生命周期
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12323683.html
Copyright © 2011-2022 走看看