您的位置:首页 > 其它

*Leetcode_validate-binary-search-tree

2014-04-01 16:30 363 查看
地址:http://oj.leetcode.com/problems/validate-binary-search-tree/

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.

本题解法可有两种,都可以研究一下,扩展思维。

可以用中序遍历确定之。二分查找树的中序遍历都是有序的。

参考代码:

class Solution {
public:
void inorder(TreeNode*p, vector<int>&vec)
{
if(p->left)
inorder(p->left, vec);
vec.push_back(p->val);
if(p->right)
inorder(p->right, vec);
}
bool isValidBST(TreeNode *root) {
if(!root)
return true;
vector<int>vec;
inorder(root, vec);
bool ans = true;
for(int i = 0; i<vec.size()-1; ++i)
{
if(vec[i]>=vec[i+1])
{
ans = false;
break;
}
}
return ans;
}
};


//SECOND TRIAL, without any improvement

class Solution {
private:
vector<int>vec;
void InOrder(TreeNode *root)
{
if(!root)
return;
InOrder(root->left);
vec.push_back(root->val);
InOrder(root->right);
}
public:
bool isValidBST(TreeNode *root) {
InOrder(root);
for(int i = 0; i<(int)vec.size()-1; ++i)
if(vec[i] >= vec[i+1])
return false;
return true;
}
};


//Third trial, 80ms, 每次检查缩小区间

class Solution {
private:
bool isValid(TreeNode *root, int left, int right)
{
if(!root)
return true;
if(left < root->val && root->val < right)
return isValid(root->left, left, root->val) && isValid(root->right, root->val, right);
else
return false;
}
public:
bool isValidBST(TreeNode *root) {
return isValid(root, INT_MIN, INT_MAX);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: