C++ 判断是不是二叉搜索树

    //给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。
    //二叉搜索树满足每个节点的左子节点小于当前节点且右子节点大于当前节点。
    //数据范围:节点数量满足1-10000,节点上的值满足int的值范围
    //用中序遍历很简单就能得到结果
    bool isValidBST(TreeNode* root) 
    {
        stack<TreeNode*> stk;
        TreeNode* p = root;
        bool isFirst = true;
        int lastVal;
        while (p||!stk.empty())
        {
            while (p)
            {
                stk.emplace(p);
                p = p->left;
            }
            if (!stk.empty())
            {
                p = stk.top();
                stk.pop();
                if (isFirst)
                {
                    lastVal = p->val;
                    isFirst = false;
                }
                else
                {
                    if (lastVal >= p->val) 
                        return false;
                }
                p = p->right;
            }
        }
        return true;
    }

 

posted @ 2022-01-01 09:07  mshentai  阅读(47)  评论(0编辑  收藏  举报