您的位置:首页 > 其它

98. Validate Binary Search Tree

2016-07-04 15:41 204 查看
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

Binary tree 
[2,1,3]
,
return true.

Example 2:

1
/ \
2   3

Binary tree 
[1,2,3]
,
return false.

题意:判断一棵树是否为二叉搜索树。

思路:二叉搜索树结点值满足一定的范围,在范围之中即为满足二叉搜索树。

/**
* 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) {
return isValidBST(root, LLONG_MIN, LLONG_MAX);
}
private:
bool isValidBST(TreeNode* root, long long int minimum, long long int maximum){
if (root == NULL)
return true;
if (root->val <=minimum || root->val >= maximum)
return false;
return isValidBST(root->left, minimum, root->val) && isValidBST(root->right, root->val, maximum);
}
};

思路2:中序遍历的思想,如果上一个结点的值大于或等于当前结点的值,则返回false。

/**
* 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) {//中序遍历法
if (root == NULL)
return true;
if (!isValidBST(root->left))
return false;
if (preNode != NULL && preNode->val >= root->val)
return false;
preNode = root;
if (!isValidBST(root->right))
return false;
return true;
}
private:
TreeNode* preNode = NULL;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: