題目
請實(shí)現(xiàn)兩個函數(shù),分別用來序列化和反序列化二叉樹。
程序核心思想
序列化二叉樹的意思是選擇一種遍歷方式,把遍歷的結(jié)果寫成一個字符串,null也要寫出來,形式隨意。
這里選擇先序遍歷的方式,來到頭節(jié)點(diǎn),頭節(jié)點(diǎn)的值寫成一個字符串,整體的結(jié)果是頭結(jié)點(diǎn)的字符串加上左子樹形成的字符串加上右子樹形成的字符串,如果當(dāng)前節(jié)點(diǎn)為null,則返回字符串“null”。
反序列化的意思是給定一個字符串,然后把它還原成二叉樹。
首先要先把字符串按照一定的分隔符給分開來,把分開的小字符串存入字符串?dāng)?shù)組中。然后把依次把字符串加入隊(duì)列,然后出列一個元素,如果這個元素不為null,那么創(chuàng)造一個節(jié)點(diǎn),節(jié)點(diǎn)的值為這個元素,然后這個節(jié)點(diǎn)的左指針和右指針遞歸這個過程,如果這個元素為null,那么返回null。
Tips
無
代碼
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
String Serialize(TreeNode root) {
if(root == null) return "null,";
String s = root.val + ",";
return s + Serialize(root.left) + Serialize(root.right);
}
TreeNode Deserialize(String str) {
String[] arr = str.split(",");
Queue<String> queue = new LinkedList<String>();
for(int i = 0; i < arr.length; i++){
queue.offer(arr[i]);
}
return deserie(queue);
}
TreeNode deserie(Queue<String> queue){
String s = queue.poll();
if(s.equals("null")) return null;
TreeNode node = new TreeNode(Integer.valueOf(s));
node.left = deserie(queue);
node.right = deserie(queue);
return node;
}
}