나는이 문제를하고있는 중이 야 : 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