原題:这里写链接内容
分析:这道题问给定一个序列化的书,判断是否是个有效的先序遍历结果,而且不允许重构树的方法。
首先,我们从叶节点开始看,对于一个叶节点,它的接下来的那两个字母一定是#,因此,在遇到两个#的时候,不妨把叶节点删掉,也就是将该叶节点变成一个#,这样当遍历一遍的时候,对于合法的树,那么一定只剩下#
public class Solution {
public boolean isValidSerialization(String preorder) {
String[] strs = preorder.split(",");
//add all char array to lists
ArrayList<Character> lists = new ArrayList<Character>();
for(String str:strs){
lists.add(str.charAt(0));
}
for(int i = 0;i<lists.size();i++){
char ch = lists.get(i);
if(ch == '#' && i == 0)
break;
if(ch == '#' && lists.get(i-1) == '#'){
i-=2;
lists.remove(i);//将prevprev移除
lists.remove(i);//将prev移除
i--;//这里-1表示回退一格,从当前位置继续
}
}
if(lists.size()!=1)
return false;
return lists.get(0) == '#';
}
}