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:
Binary tree
return true.
Example 2:
Binary tree
return false.
题意:判断一棵树是否为二叉搜索树。
思路:二叉搜索树结点值满足一定的范围,在范围之中即为满足二叉搜索树。
思路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;
};
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;
};
相关文章推荐
- REST学习总结
- win7系统使用media player播放MP4视频只有声音没有图像的原因及解决方法
- Freemarker的使用
- Java自定义注解Annotation
- iOS 发布上传 Error ITMS-90046
- 成长记-UILable设置行间距
- Spring MVC中设置编码格式为utf-8的方式
- Entity Framework6 with Oracle(可实现code first)
- php单链表实现代码分享
- iOS折线图实现(一)
- java组合模式(Composite)-结构性
- msdn webcast 下载地址整理
- mysql 锁超时定位与分析
- jdbc 批量操作数据库(插入、更新)
- Mysql学习笔记
- linux portmap和nfs
- 解决ListView setOnItemLongClickListener 长按无响应(嵌套GridView)
- python iter( )函数
- jsp中的${}
- 文件上传