力扣刷题:26-验证二叉树的前序序列化(331)

88 阅读1分钟

前序序列化的二叉树,是按照根左右的顺序序列化存储的,先把题目给定的每一个节点,存放到vector中,然后从最尾端的倒数3个元素开始判断,如果这三个元素符合[数字,#,#]的格式,就将这三个元素合并为一个#,然后重复操作,直到剩下一个元素为止,则说明验证通过。

下面是C++语言实现的代码:

class Solution {
public:
    bool isValidSerialization(string preorder) {
        if (preorder == "#") {
            return true;
        }
        vector<string> vec;
        int curr = 0;
        for (int i = 0; i < preorder.size(); i++) {
            if (preorder[i] == ',') {
                vec.push_back(preorder.substr(curr, i - curr));
                curr = i + 1;
            } else {
                continue;
            }
            process(vec);
        }
        if (curr == 0) {
            return false;
        }
        vec.push_back(preorder.substr(curr));
        process(vec);
        return vec.size() == 1;
    }

    void process(vector<string> &vec) {
        while (vec.size() > 2 && vec[vec.size() - 1] == "#" && vec[vec.size() - 2] == "#" && vec[vec.size() - 3] != "#") {
            vec.pop_back();
            vec.pop_back();
            vec.pop_back();
            vec.push_back("#");
        }
    }
};