*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.
本题解法可有两种,都可以研究一下,扩展思维。
可以用中序遍历确定之。二分查找树的中序遍历都是有序的。
参考代码:
//SECOND TRIAL, without any improvement
//Third trial, 80ms, 每次检查缩小区间
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); } };
相关文章推荐
- 【leetcode】Validate Binary Search Tree 题解三种思路
- [LeetCode] Validate Binary Search Tree
- 【Leetcode】【python】Validate Binary Search Tree
- Leetcode 98. Validate Binary Search Tree
- LeetCode Validate Binary Search Tree
- [leetcode]Validate Binary Search Tree @ Python
- LeetCode-validate-binary-search-tree
- LeetCode:Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree
- LeetCode: Validate Binary Search Tree [098]
- LeetCode--Validate Binary Search Tree
- [Leetcode]@python 98. Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree(Python详解及实现)
- 【leetcode】Validate Binary Search Tree
- LeetCode No.98 Validate Binary Search Tree
- 【LeetCode】Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree 验证二叉搜索树
- LeetCode 098 Validate Binary Search Tree
- 【Leetcode】【Medium】Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree