劍指Offer-Java-序列化二叉樹
阿新 • • 發佈:2018-12-13
題目
請實現兩個函式,分別用來序列化和反序列化二叉樹
程式碼
此題的核心點是如何表示二叉樹,並且解釋。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
String Serialize(TreeNode root) {
StringBuilder string = new StringBuilder();
S(root,string);
return string.toString();
}
void S(TreeNode root,StringBuilder string){
//當沒有子節點的時候加上#!
if(root==null){
string.append("#!");
return;
}
//在每個資料後面都加上!
//所以當整個字串用!分割以後 無節點的時候為#,有節點的時候為其資料
string.append(root.val+"!");
S(root.left,string);
S(root.right,string);
}
TreeNode Deserialize(String str) {
String[] string = str.split("!");
TreeNode root = D(string);
return root;
}
int index = 0;
TreeNode D(String[] string){
//當為#的時候說明沒有,index後移 並且返回null
if(string[index].equals("#")){
index++;
return null;
}else{
//當有節點的時候先構造節點,再對其左子樹和右子樹進行構造,次數的left和right不能互換方向,因為在序列化的時候的順序是先序及先root再left,right。所以其順序不可變
TreeNode temp = new TreeNode(Integer.parseInt(string[index]));
index++;
temp.left=D(string);
temp.right=D(string);
return temp;
}
}
}