98. Validate Binary Search Tree

Posted dysjtu1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于98. Validate Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章

98. Validate Binary Search Tree

LC.98.Validate Binary Search Tree

LeetCode98. Validate Binary Search Tree

98. Validate Binary Search Tree

98. Validate Binary Search Tree

98. Validate Binary Search Tree