LeetCode: Validate Binary Search Tree

来源:互联网 发布:java 获取方法的泛型 编辑:程序博客网 时间:2024/04/30 15:47

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.

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isValidBST(TreeNode *root) {        return validate(root, INT_MAX, INT_MIN);            }private:    bool validate(TreeNode *root, int max, int min)    {        if(root == NULL)            return true;        if(root->val >= max || root->val <= min)            return false;        return validate(root->left, root->val, min) && validate(root->right, max, root->val);    }};

Round 2:
class Solution {public:    bool isValidBST(TreeNode *root) {if(root == NULL)return true;long top = INT_MAX;long bot = INT_MIN;top++;bot--;        return dfs(root, top, bot);    }private:bool dfs(TreeNode *node, long max, long min){if(node == NULL)return true;if(node->val >= max || node->val <= min)return false;return dfs(node->left, std::min(max, (long)node->val), min) && dfs(node->right, max, std::max(min, (long)node->val));}};


0 0