バイナリシリアル - 安全性を証明するために提供

タイトル説明

実施二つの機能をシリアライズとデシリアライズバイナリに使用されています
 
これは、バイナリの配列を指す:二分木はバイナリ永続メモリを設定することができるように、トラバース方法の結果に応じて、書式文字列で保存されています。バイナリツリートラバーサル順序が変更され、後のシリアル化が最初の順序に基づいてもよいし、順番に、結果のシーケンスは、シンボルへのいくつかの配列によって空白ノード(#)を表す文字列であります!エンド・ノードは、値(値を!)を表します。

非直列化バイナリツリー手段:直列化された文字列strのいくつかの結果は、バイナリツリーを再構築するトラバーサル順序を得ました。
 
考える:先行順走査は、その後構築し、文字列から文字列に格納されます
二つの再帰
パブリック クラスソリューション{
     int型私= -1 ; 
    ストリングシリアライズ(ツリーノードのルート){ 
        StringBuilderのSB = 新規のStringBuilder();
        もし(ルート== nullのリターン "#!" ; 
        SerializeHelper(根、SB)。
        リターンsb.toString(); 
    } 

    / * 
    前序遍历
     * / 
    プライベート 無効SerializeHelper(TreeNodeの根、StringBuilderのSB){
         場合(ルート== nullの){ 
            sb.append( "#!" );
            リターン; 
        }
        sb.append(String.valueOf(root.val))。
        sb.append( "!" ); 
        SerializeHelper(root.left、SB)。
        SerializeHelper(root.right、SB)。
    } 

    ツリーノードデシリアライズ(文字列str){ 
        場合(STR == NULL戻り ヌル
        String []型の文字列 = str.split( "!" );
        もし(strings.length == 1)リターン ヌル返すDeserializeHelper(文字列); 
    } 

    プライベートツリーノードDeserializeHelper(文字列[] STR){ 
        ツリーノードのルート = NULL; 
        I ++ ;
        もし(!STR [I] .equals( "#" )){ 
            ルート = 新しいツリーノード(Integer.valueOf(STR [I])); 
            root.left = DeserializeHelper(STR)。
            root.right = DeserializeHelper(STR)。
        } 
        戻りルート。
    } 
}

 

おすすめ

転載: www.cnblogs.com/nlw-blog/p/12482197.html