前序序列化的二叉树,是按照根左右的顺序序列化存储的,先把题目给定的每一个节点,存放到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("#");
}
}
};