LeetCode: Validate Binary Search Tree

来源:互联网 发布:java list模糊查询 编辑:程序博客网 时间:2024/04/29 11:05

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) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if (root == NULL)            return true;                stack<TreeNode*> stk;        TreeNode* p = root;        int preVal = -1;        int first = true;        do        {            if (p != NULL)            {                stk.push(p);                p = p->left;            }            else            {                p = stk.top();                stk.pop();                if (first)                {                    preVal = p->val;                    first = false;                }                else                {                    if (preVal < p->val)                    {                        preVal = p->val;                    }                    else                        return false;                }                p = p->right;            }        }while(!stk.empty() || p != NULL);                return true;    }};