判断二叉树棵树是否为搜索二叉树


利用搜索二叉树的特性,中序遍历结果为一个无重复数据的升序序列
则先将这颗二叉树采用中序遍历结果保存在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;
    }
};

完。

猜你喜欢

转载自blog.csdn.net/misszhoudandan/article/details/80876930