今日Leetcode一题,是栈和树遍历相结合的一道题.
学到的技巧就是:使用stringstream和getline实现Split效果
题目链接:题目
getline ( istream &is , string &str , char delim )
参数一:istream &is 表示一个输入流,譬如cin,stringstream;
参数二:string &str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以)
参数三:char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入)
题解:
class Solution {
public:
bool isValidSerialization(string preorder) {
//验证序列化
//思想就是栈顶有两个"#"的时候,连续弹出这两个"#"以及它们的共同父节点,然后将一个"#"入栈。也就是用空节点代替一棵子树
//技巧:使用stringstream和getline 实现split效果
vector<string> s;//当成栈使用
stringstream ss;
ss<<preorder;
string temp;
while(getline(ss,temp,',')){
s.push_back(temp);
while(s.size()>=3&&s[s.size()-1]=="#"&&s[s.size()-2]=="#"&&s[s.size()-3]!="#"){
s.pop_back();
s.pop_back();
s.pop_back();
s.push_back("#");
}
}
return s.size()==1&&s[0]=="#";
}
};