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 3Binary tree
[2,1,3]
, return true.
Example 2:
1 / \ 2 3
Binary tree [1,2,3]
, return false.
====================================================================================
题目链接:https://leetcode.com/problems/validate-binary-search-tree/
题目大意:判断一个二叉树是不是二叉搜索树。
思路:中序遍历
参考代码:
/**
* 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 ;
vector <TreeNode*> v ;
vector <int> ans ;
TreeNode* temp = root ;
while ( temp != NULL || ! v.empty() )
{
while ( temp != NULL )
{
v.push_back ( temp ) ;
temp = temp -> left ;
}
if ( ! v.empty() )
{
temp = v.back () ;
v.pop_back () ;
ans.push_back ( temp -> val ) ;
temp = temp -> right ;
}
}
for ( int i = 1 ; i < ans.size() ; i ++ )
if ( ans[i] <= ans[i-1] )
return false ;
return true ;
}
};