我做的这个问题: https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/在C++中实现这种工作流程的最佳方法是什么?
我的方法是序列化的字符串分配给像 “1#,2#,#” 流。 然后从流中读取一个字符。如果它是'#',则返回。否则, 访问左侧和右侧的孩子。
class Solution {
stringstream pre; int char_count = 0;
public:
bool visit() {
if (char_count >= pre.str().size()) return 0;
char key; char comma;
while (char_count < pre.str().size() && pre.peek() != ',') {
pre >> key;
char_count++;
}
if (pre.peek() == ',') {
pre >> comma;
char_count++;
}
if (key == '#') return 1;
return visit() && visit();
}
bool isValidSerialization(string preorder) {
pre << preorder;
cout << "preorder: " << preorder << endl;
if (!visit()) return 0;
if (pre.str().size() > char_count) return 0;
return 1;
}
};
int main() {
Solution q;
cout << q.isValidSerialization("1,#,#");
}
早些时候,我被检查
if (!pre.str().size())
,因为我错误地预计流删除所提取的字符。现在我维护着char_count,但代码不再优雅。有什么方法可以在C++中简化这个。
你想做什么? – sharyex
在我从流中提取1个字符后,它不应该是33。 –
'stringbuf :: str()'返回整个基础缓冲区。尝试做'q_s.str()。substr(q_s.tellg())' – 0x499602D2