カジュアルワーキング
2つの関数はシリアル化するために使用され、バイナリデシリアライズされた実装
バイナリツリー手段の配列を:、文字列の形式で保存された結果のいくつかの実施形態に係る二分木をトラバースするようにメモリアップビルドバイナリツリーが持続することができます。バイナリツリートラバーサル順序が変更され、後のシリアル化が最初の順序に基づいてもよいし、順番に、結果のシーケンスは、シンボルへのいくつかの配列によって空白ノード(#)を表す文字列であります!エンド・ノードは、値(値を!)を表します。
非直列化バイナリツリー手段:直列化された文字列strのいくつかの結果は、バイナリツリーを再構築するトラバーサル順序を得ました。
思考
同じルールに従ってバイナリツリートラバーサルなるように回復する最初の記憶のためのトラバース時間、および。何がそのようになることはできませんように思えます。
コード
public class Solution {
String Serialize(TreeNode root) {
if(root == null)
return "";
StringBuilder sb = new StringBuilder();
Serialize2(root, sb);
return sb.toString();
}
void Serialize2(TreeNode root, StringBuilder sb) {
if(root == null) {
sb.append("#,");
return;
}
sb.append(root.val);
sb.append(',');
Serialize2(root.left, sb);
Serialize2(root.right, sb);
}
int index = -1;
TreeNode Deserialize(String str) {
if(str.length() == 0)
return null;
String[] strs = str.split(",");
return Deserialize2(strs);
}
TreeNode Deserialize2(String[] strs) {
index++;
if(!strs[index].equals("#")) {
TreeNode root = new TreeNode(0);
root.val = Integer.parseInt(strs[index]);
root.left = Deserialize2(strs);
root.right = Deserialize2(strs);
return root;
}
return null;
}
}