题意:判断先序搜索的数列可否形成二叉树。
思路:用堆栈模拟先序搜索。
class Solution {
public:
bool isValidSerialization(string preorder) {
stack<char> s;
for(int i = 0; i < preorder.length(); ++ i) {
if(preorder[i] == ',') continue;
if(i > 0 && preorder[i - 1] != ',') continue;
if(preorder[i] == '#') {
while(!s.empty() && s.top() == '#') {
s.pop();
if(s.empty()) return false;
s.pop();
//if(s.empty()) return false;
}
s.push('#');
continue;
}
s.push(preorder[i]);
//cout << s.top() << endl;
}
/*
while(!s.empty()) {
cout << s.top() << endl;
s.pop();
}
*/
//return false;
if(s.top() == '#' && s.size() == 1) return true;
else return false;
}
};
本文介绍了一种使用堆栈来判断给定的先序遍历序列是否能构成一棵合法的二叉树的方法。通过逐个处理序列中的元素,并利用堆栈进行辅助判断,可以有效地解决这一问题。
565

被折叠的 条评论
为什么被折叠?



