分析
- 如果遇到数字,说明其不是叶子节点,继续往下递归
- 如果遇到’#’,说明其是一个叶子节点,当前下标id+2往下递归
C++ 代码
class Solution {
public:
string s;
int id=0;
bool isValidSerialization(string preorder) {
s=preorder+',';
if(!dfs()) return false;
return id==s.size();
}
bool dfs()
{
if(id==s.size()) return false; //在还未完成递归的时候发现id==s.size()即字符串遍历完了,说明不是合法前序
if(s[id]=='#')
{
id+=2;
return true;
}
while(s[id]!=',') id++; //用while循环将所有的数字都跳过
id++; //将','跳过
return dfs() && dfs(); //递归左子树 && 右子树
}
};
前序遍历验证算法
本文介绍了一种通过前序遍历序列验证二叉树是否有效的算法实现。使用C++编程语言,通过递归方法检查给定的字符串序列是否符合二叉树的前序遍历特征。对于每个节点,算法判断其为叶子节点还是内部节点,并递归处理左右子树。
757

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



