题解 | #二叉搜索树的后序遍历序列#

二叉搜索树的后序遍历序列

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if (sequence.empty())
            return false;

        return order(sequence, sequence.size());
    }

    bool order(const vector<int> &sequence, int length) {
        if (sequence.empty() || length <= 0)
            return false;
        
        int root = sequence[length - 1];
        
        int i = 0;
        for (; i < length - 1; i++) {
            if (sequence[i] > root) 
                break;
        }

        int j = i;
        for (; j < length - 1; j++) {
            if (sequence[j] < root)
                return false;
        }

        bool left = true;
        
        if (i > 0) {
            vector<int> tmp(sequence.begin(), sequence.begin() + i);
            left = order(tmp, i);
        }

        bool right = true;
        if (i < length - 1) {
            vector<int> tmp(sequence.begin() + i, sequence.end() - 1);
            right = order(tmp, length - i - 1);
        }

        return (left && right);
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务