One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node's value. If it is a null node, we record using a sentinel value such as
#
._9_ / \ 3 2 / \ / \ 4 1 # 6 / \ / \ / \ # # # # # #
For example, the above binary tree can be serialized to the string
"9,3,4,#,#,1,#,#,2,#,6,#,#"
, where #
represents a null node.
Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree.
Each comma separated value in the string must be either an integer or a character
'#'
representing null
pointer.
You may assume that the input format is always valid, for example it could never contain two consecutive commas such as
"1,,3"
.
Example 1:
Return
"9,3,4,#,#,1,#,#,2,#,6,#,#"
Return
true
Example 2:
Return
"1,#"
Return
false
Example 3:
Return
"9,#,#,1"
Return
false
Answer:
public boolean isValidSerialization(String preorder) {
if(preorder==null || preorder.length()==0)return true;
int len = preorder.length();
//"#", return true!
if(preorder.charAt(0)=='#')return len==1;
int count = 1;
String[] strArr = preorder.split(",");
for(int i=0; i<strArr.length; i++){
if(!strArr[i].equals("#")){
count++;
}else{
count--;
if(count == 0){
return i==strArr.length-1;
}
}
}
return count==0;
int len = preorder.length();
//"#", return true!
if(preorder.charAt(0)=='#')return len==1;
int count = 1;
String[] strArr = preorder.split(",");
for(int i=0; i<strArr.length; i++){
if(!strArr[i].equals("#")){
count++;
}else{
count--;
if(count == 0){
return i==strArr.length-1;
}
}
}
return count==0;
}
No comments:
Post a Comment