[LeetCode]Validate Binary Search Tree

来源:互联网 发布:网络空间拟态 编辑:程序博客网 时间:2024/06/18 01:11
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.confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.OJ's Binary Tree Serialization:The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.Here's an example:   1  / \ 2   3    /   4    \     5The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".

思路一:二叉树(二叉搜索树)的中序遍历(左中右)应该是递增的序列。
所以只要写一下中序遍历即可。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isValidBST(TreeNode* root) {        stack<TreeNode*> sta;        TreeNode* T=root;        double left_ele = INT_MIN-1.0;        while(!sta.empty()||T){            while(T){                sta.push(T);                T=T->left;            }            T = sta.top();            sta.pop();            if(T->val>left_ele)                left_ele = T->val;            else                return false;            T =T->right;        }        return true;    }};

16ms AC

第二种思路就是递归,向左递归时,更新上界;向右递归时,更新下界。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isValidBST(TreeNode* root) {        double upper = INT_MAX+1.0;        double lower = INT_MIN-1.0;        return check(root, upper,lower);    }    bool check(TreeNode* T, double upper, double lower){        if(!T)            return true;        else if(T->val>=upper||T->val<=lower)                return false;        return check(T->left,T->val,lower)&check(T->right,upper,T->val);    }};

16ms AC

0 0
原创粉丝点击