class Solution {
public:
bool isValidSerialization(string preorder)
{
stack<string> s; //用栈来保存不是','的字符
if(preorder == "#") //如果preorder等于“#",即可以直接返回true;
return true;
if(preorder[preorder.size() - 1] != '#') //如果最后一个元素不是“#”可以直接返回false
return false;
string temp = ""; //初始化一个temp用于保存中间数据,因为数字可能不止一位
for(int i = 0;i < preorder.size();i++) //遍历整个preorder
{
if(preorder[i] == ',') //如果遍历到的为逗号
{
if(temp != "") //如果temp不等于"",则说明有数字或者#需要压入栈中
s.push(temp);
temp = ""; //将temp置空
continue; //进入下一次循环
}
else if(preorder[i] == '#') //遍历到的是#时
{
if(s.empty()) // 如果此时栈为空,可以直接返回false
return false;
while(s.top() == "#") //如果栈顶元素为#
{
s.pop(); //将栈顶元素出栈
if(s.empty()) //如果此时栈为空,可以直接返回false
return false;
s.pop(); //将栈顶元素出栈
if(s.empty()) //如果此时栈为空,跳出循环
break;
}
s.push("#"); //将“#”压入栈中
continue; //进入下一次循环
}
else
temp += preorder[i]; //遍历到的是数字
}
if(s.top() != "#") //若栈顶元素不为“#”可以直接返回false
return false;
else
{
s.pop(); //将栈顶元素出栈
if(s.empty()) //若栈为空则返回true,不然返回false
return true;
else
return false;
}
}
};