証明の安全プラン61は、バイナリツリーをシリアライズ

タイトル説明

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

直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。
 

コードは以下の通りです

// 使用トラバーサル順序は、完全なバイナリツリーのための簡単な方法に変換する必要はなく、
パブリック クラスのソリューション{ 
    文字列をシリアル化(TreeNodeのルート){ 
        StringBuilderのSB = 新新のStringBuilder(); 
        キュー <のTreeNode>キュー= 新しい新しいのLinkedList <のTreeNode> ();
         IF(=ルート!ヌル
            queue.add(ルート); 
        ながら(!queue.isEmpty()){ 
            ツリーノードノード = queue.poll();
             IF(ノード!= NULL ){ 
                Queue.offer(node.left)。 
                queue.offer(node.right)。
                sb.append(node.val  + "")。
            } { 
                sb.append( "#" + "" )。
            } 
        } 
        もし(sb.length()!= 0 
            sb.deleteCharAt(sb.length() -1 )。
        返すsb.toStringを(); 
  } 
    ツリーノードデシリアライズ(文字列str){ 
       ツリーノードヘッド = NULL ;
        もし(strの== nullの || str.length()== 0 リターン・ヘッド; 
        文字列[]ノード = str.split( "" )。 
        ツリーノード[]のTreeNode = 新しいですツリーノード[nodes.length]。
        以下のためにint型 i = 0; iはnodes.length <; iは++ ){
             場合(ノード[i]は.equals( "#"! ))
                のTreeNode [I] = 新しいツリーノード(Integer.valueOf(ノード[I]))。
        } 
        のためのint型 J = 1、I = 0; J <treeNodes.length; iが++ ){
             場合(!のTreeNode [I] = NULL ){ 
                のTreeNode [I] .LEFT =のTreeNode [J ++ ]。
                TreeNode [i]は.RIGHT =のTreeNode [J ++ ]; 
            }
        } 
         ]。
  }戻りのTreeNode [0 
} 
 
// 前序遍历
パブリック クラスソリューション{ 
    文字列シリアライズ(ツリーノードのルート){ 
        StringBuilderのSB = 新規のStringBuilder(); 
        getSerializeString(根、SB)。
        もし(!sb.length()= 0 
            sb.deleteCharAt(sb.length() -1 )。
        返すsb.toStringを(); 
      } 
    getSerializeString(ツリーノードのルート、のStringBuilder SB){ 
        場合(ルート== NULL 
            sb.append( "#" )。
        他の{ 
            sb.append(root.val + "" );
            getSerializeString(root.left、SB)。
            getSerializeString(root.right、SB)。
        } 
    } 
    ツリーノードデシリアライズ(文字列str){ 
       場合(STR == NULL || str.length()== 0 || str.length()== 1 リターン ヌル
        文字列[]ノード = str.split( "" )。
        ツリーノード[]のTreeNode = 新しいツリーノード[nodes.length]。
        以下のためにint型 i = 0; iはnodes.length <; iは++ ){
             もし!(ノード[i]は.equals( "#"))
                TreeNode [I] = 新しいツリーノード(Integer.valueOf(ノード[I]))。
        } 
        スタック <ツリーノード>スタック= 新しいスタック<> (); 
        stack.push(のTreeNode [ 0 ])。
        int型 I = 1 ;
        一方、(!のTreeNode [I] = NULL ){ 
            。stack.peek()左 = のTreeNode [I]。
            stack.push(のTreeNode [I ++ ])。
        } 
        ながら(!stack.isEmpty()){ 
            stack.pop()右。 =のTreeNode [++ i]は、
            もし!(のTreeNode [I] = NULL ){
                stack.push(のTreeNode [I ++ ]);
                 ながら!(のTreeNode [I] = NULL ){ 
                    stack.peek()左 =用のTreeNode [i]は、
                    stack.push(のTreeNode [ I ++ ]); 
                } 
            } 
        } 
        戻りのTreeNode [0 ]; 
      } 
}

 

 

 

おすすめ

転載: www.cnblogs.com/Transkai/p/11422305.html