タイトル説明
二つの機能をバイナリをシリアライズとデシリアライズするために使用される実装
これは、バイナリの配列を指す:二分木はバイナリ永続メモリを設定することができるように、トラバース方法の結果に応じて、書式文字列で保存されています。バイナリツリートラバーサル順序が変更されたシリアル化が一次に基づくことができる、配列において、後に、結果のシーケンスは、シンボルへのいくつかの配列によって空白ノード(#)を表す文字列であります!エンド・ノードは、値(値を!)を表します。
直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。
直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。
トピック接続:
パッケージcom.sunshine.OFFER66_SECOND; 輸入org.junit.Test; 輸入はjava.util.ArrayList; パブリック クラスA61_SerializeDeserialize { @Test 公共 ボイド試験(){ ツリーノードN1 = 新しいツリーノード(1 )。 ツリーノードN2 = 新しいツリーノード(2 )。 ツリーノードN3 = 新しいツリーノード(3 )。 ツリーノードN4 = 新しいツリーノード(4 )。 ツリーノードN5 = 新しいのTreeNode(5)。 ツリーノードN6 = 新しいツリーノード(6 )。 // ツリーノードN7 =新しいのTreeNode(7); n1.left = N2; n1.right = N3; // n2.left = N4; n2.right = N5; n3.left = N6; // n3.right = N7; 文字列シリアライズ= シリアライズ(N1)。 System.out.println(シリアライズ)。 ツリーノードをデシリアライズ = デシリアライズ(直列化)。 TreeUtility.printTreeOfLine(デシリアライズ)。 } 文字列ANS = "" ; 文字列シリアライズ(ツリーノードのルート){ もし(ヌル == ルート){ ANS + = "#!" ; 戻るANSを。 } ANS + = root.val + "!" ; (root.left)シリアライズ。 (root.right)シリアライズ。 戻るANSを。 } int型の POS = 0 。 ツリーノードデシリアライズ(文字列str){ String []型スプリット = str.split( "!" )。 もし(POS> = split.length){ 戻り ヌル。 } もし(スプリット[POS] .equals( "#" )){ リターン ヌル。 } ツリーノードのノード = 新しいツリーノード(Integer.parseInt(スプリット[POS]))。 POS ++ ; node.left = デシリアライズ(STR)。 POS ++ ; node.right = デシリアライズ(STR)。 リターン・ノード; } }