/*
* 算法思想:
* 借助栈,从后往前遍历字符串,找到#进栈,找到数字的话,则出栈两个元素(如果此时栈内少于两个元素,则 返回失败),
* 再把自己进栈,遍历完字符串,栈中只有一个元素为二叉树的根节点。
*/
int get_len(char *s){
int i=0;
while(*s++ != 0)
i++;
return i;
}
bool isValidSerialization(char * s){
int len = get_len(s);
if(!len) return false;
int i = len - 1;
int index = 0;
char *stack = (char *)malloc(sizeof(char) * (len+1));
bool ret = true;
memset(stack, 0, sizeof(char) * (len+1));
for(; i>=0; --i){
if(s[i] == ',') continue;
if(s[i] == '#'){
stack[index++] = '#';
}else{
if(index>=2){
index -= 2;
stack[index++] = s[i];
}else{
ret = false;
break;
}
}
/* 如果是多位数字的话,往前找,找到下一个 ',' */
while(i>0 && s[i] != ',' ) i--;
}
free(stack);
return ret && index==1;
}
leetcode-331. 验证二叉树的前序序列化-C 语言
最新推荐文章于 2024-04-07 21:27:13 发布