利用搜索二叉树的特性,中序遍历结果为一个无重复数据的升序序列 则先将这颗二叉树采用中序遍历结果保存在vector中 然后遍历vector,判断是否满足是升序并且无重复数据,不满足则不是搜索二叉树,反之则是搜索二叉树。 时间复杂度为O(N) 空间复杂度为O(N) |
代码如下:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
//中序遍历二叉树,采用递归方法
void mid_order(TreeNode * root, vector<int> & v1)
{
if(root == NULL)
{
return;
}
mid_order(root -> left , v1);//先遍历左子树
v1.push_back( root -> val); //然后遍历根节点,将值存储在vector中
mid_order(root -> right ,v1);//再遍历右子树
}
bool isValidBST(TreeNode *root)
{
if(root == NULL)
{
return true;
}
vector<int> v;
mid_order(root , v);
size_t size = v.size();
size_t i = 0;
for(i = 0; i < size - 1 ; ++i)
{
if(v[i] >= v[i + 1])//不符合升序,或者存在重复,返回false
{
return false;
}
}
//经中序遍历后为无重复的升序序列,则是二叉搜索树
return true;
}
};
完。