今天是比較搞笑,做了一個二叉樹序列化與反序列化的題目。編譯了半天不通過,始終報java.lang.ArrayIndexOutOfBoundsException,也找不問題所在。最後直接對着牛客網網友編譯通過的代碼敲了一遍,後來發現問題所在。
原代碼:
public class Solution {
public static int index=-1;
String Serialize(TreeNode root) {
StringBuilder sr=new StringBuilder();
if(root==null) {
sr.append("#,");
return sr.toString();
}
sr.append(root.val+",");
sr.append(Serialize(root.left));
sr.append(Serialize(root.right));
return sr.toString();
}
TreeNode Deserialize(String str) {
index++;
int length=str.length();
if(index>=length) return null;
String string[]=str.split(",");
TreeNode node=null;
if(!string[index].equals("#")){
node=new TreeNode(Integer.parseInt(string[index]));
node.left=Deserialize(str);
node.right=Deserialize(str);
}
return node;
}
}
編譯結果:
編譯通過代碼:
public class Solution {
int index=-1;
String Serialize(TreeNode root) {
StringBuilder sr=new StringBuilder();
if(root==null) {
sr.append("#,");
return sr.toString();
}
sr.append(root.val+",");
sr.append(Serialize(root.left));
sr.append(Serialize(root.right));
return sr.toString();
}
TreeNode Deserialize(String str) {
index++;
int length=str.length();
if(index>=length) return null;
String string[]=str.split(",");
TreeNode node=null;
if(!string[index].equals("#")){
node=new TreeNode(Integer.parseInt(string[index]));
node.left=Deserialize(str);
node.right=Deserialize(str);
}
return node;
}
}
兩處代碼僅僅差別在于一個index的定義,一個是static類型,一個是非靜态類型。個人猜想牛客網的判分平台可能将
Solution類作為一個内部類加載的,而不是唯一主類的那個Solution類。