本题源自leetcode 331
----------------------------------------------------------------------
思路: 用出入度来计算。 每个点都有一个入度。如果是非空节点,有俩个出度。最后判断度数为0 则 是一个序列化。
2 初始化时候,在字符串结尾加一个逗号,便于处理最后一个字符
代码:
bool isValidSerialization(string preorder) {
if(preorder.empty())
return false;
preorder += ',';
int n = preorder.size();
int degree = 1;
for(int i = 0; i < n; i++){
if(preorder[i] != ',')
continue;
if(--degree < 0)
return false;
if(preorder[i - 1] != '#')
degree += 2;
}
return degree == 0;
}
2 分割字符串
bool isValidSerialization(string preorder) {
if(preorder.empty())
return false;
int degree = 1;
stringstream ss;
ss <<preorder;
string str;
while(getline(ss, str, ',')){
if(--degree < 0)
return false;
if(str != "#")
degree += 2;
}
return degree == 0;
}