98. 验证二叉搜索树

原题链接:98. 验证二叉搜索树

题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

思路:中序遍历二叉树得到一个序列。判断这个序列是不是递增的,是的话即为二叉搜索树,否则不是。

C++实现如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        vector<int> temp;
        if(root==NULL)
            return true;
        stack<TreeNode *> stk;
        auto node=root;
        while(node || !stk.empty())
        {
            while(node)
            {
                stk.push(node);
                node=node->left;
            }
            node=stk.top();
            temp.push_back(node->val);
            stk.pop();
            node=node->right;
        }
        return isgreater(temp);
    }


    bool isgreater(vector<int> temp)
    {
        int n=temp.size();
        int i=1;
        while(i<n)
        {
            if(temp[i-1]>=temp[i])
                return false;
            else
                i++;
        }
        return true;
    }
};

 

上一篇:Qt编写自定义控件44-天气仪表盘


下一篇:史上最全1000+Java高频面试合集,21个技术专题,命中率高达98%