題目描述:
題目: 請實現兩個函數,分別用來序列化和反序列化二叉樹。
序列化: 將所給二叉樹轉化爲字符串;反序列化:將字符串轉化爲二叉樹
思路分析:
序列化時,可以採用BFS來遍歷,運用輔助隊列來進行層次遍歷。反序列化要先構造結點,然後也是BFS進行操作。
參考代碼:
//序列化二叉樹
public String serialize(TreeNode root) {
if(root == null)return "[]";
StringBuilder res = new StringBuilder("");
LinkedList<TreeNode> queue = new LinkedList<>();
queue.addLast(root);
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();
if(node != null){
res.append(node.val + ",");
queue.add(node.left);
queue.add(node.right);
}
else res.append("null,");
}
return res.toString().substring(0, res.length() - 1);
}
//反序列化二叉樹
public TreeNode deserialize(String data) {
if(data == null || data.length() == 0 || data.equals("[]"))return null;
String[] values = data.split(",");
TreeNode root = new TreeNode(Integer.parseInt(values[0]));
LinkedList<TreeNode> queue = new LinkedList<>();
queue.addLast(root);
int i = 1;
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();//這裏是removeFirst,從頭部刪除
if(i < data.length() && !values[i].equals("null")){
node.left = new TreeNode(Integer.parseInt(values[i]));
queue.addLast(node.left);
}
i++;
if(i < data.length() && !values[i].equals("null")){
node.right = new TreeNode(Integer.parseInt(values[i]));
queue.addLast(node.right);
}
i++;
}
return root;
}
總結:
練習的多了,就感覺這道題不是很難,但是還是得注意一些細微的地方:String.length()別忘帶括號;String.substring()別寫成subString,注意大小寫;從頭部刪除還是從尾部刪除。
(完)