タイトル説明
二つの機能をバイナリをシリアライズとデシリアライズするために使用される実装
これは、バイナリの配列を指す:二分木はバイナリ永続メモリを設定することができるように、トラバース方法の結果に応じて、書式文字列で保存されています。バイナリツリートラバーサル順序が変更されたシリアル化が一次に基づくことができる、配列において、後に、結果のシーケンスは、シンボルへのいくつかの配列によって空白ノード(#)を表す文字列であります!エンド・ノードは、値(値を!)を表します。
直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。
直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。
ソリューション:
char *にその文字列変換に注意してください。
1 クラスソリューション{ 2 公共: 3 のchar *シリアライズ(ツリーノード*のルート){ 4 列 STR = "" ; 5 プレオーダー(根、STR)。 6 のchar * C = 新しい CHAR [str.size()+ 1 ]。 7 strcpyの(C、str.c_str())。 8 リターンC; 9 } 10 空隙プレオーダー(ツリーノード*根、文字列&STR) 11 { 12 であれば(ルート== nullptr) 13 { 14 STR + = " #" 。 15 リターン; 16 } 17 STR + = to_stringに(root->ヴァル)+ " !" 。 18 プレオーダー(root-> 左、STR)。 19 プレオーダー(root-> 右、STR)。 20 } 21 のTreeNode *デシリアライズ(チャー *のSTR){ 22 列 S = strが。 23 int型のインデックス= 0 。 24 リターンcreateTree(S、指数)。 25 } 26 のTreeNode * createTree(CONST 文字列&STR、INT&指数) 27 { 28 ツリーノード*ルート= nullptr。 29 であれば(STR [インデックス] == ' #' ||インデックス== str.size()) 30 { 31 インデックス++ 。 32 戻りルート; 33 } 34 列 S = "" ; 35 しばらく(STR [インデックス]!= " !' ) 36個 の+ = STR [インデックス++ ]。 37 インデックス++ ; 38 =ルート新しいツリーノード(ATOI(s.c_str()))。 39 root->左= createTree(STR、インデックス) 40 root->右= createTree(STR、インデックス) 41 リターンルート。 42 } 43 }。