1.タイトル説明
/ ** 二つの機能をバイナリシリアライズとデシリアライズするために使用される実装してください バイナリツリーのシーケンス手段:メモリようなトラバース方法の結果に応じて、特定のフォーマットのバイナリ文字列を保存しますバイナリツリーが持続することができます設定します。
バイナリツリートラバーサル順序が変更されたシリアル化が一次に基づくことができる、配列において、後に、結果のシーケンスは、文字列で
のシンボルのいくつかの配列によって空白ノード(#)を表します!エンド・ノードは、値(値を!)を表します。 直列化復元されたバイナリツリーは意味:バイナリツリーを再構築するトラバーサル順序を得たいくつかの結果strのシリアル化された文字列を。 * /
2.先行順走査
/ ** 先序遍历* / パブリック クラスのソリューション{ 公共の int型のインデックス= -1 ; / ** 序列化* / ストリングシリアライズ(ツリーノードのルート){ StringBufferのSB = 新規のStringBuffer(); もし(ルート== NULL ){ sb.append( "#" )。 返すsb.toStringを(); } sb.append(root.val + ""); // 根 sb.append(シリアル化(root.left)); // 左 sb.append(シリアル化(root.right)); //右 戻りsb.toStringを(); } / ** 反序列化* / ツリーノードデシリアライズ(文字列str){ インデックス ++ 。 文字列[] STRR = str.split( "" )。 ツリーノードのノード = NULL ; もし(!STRR [インデックス] .equals( "#" )){ ノード = 新しいツリーノード(Integer.valueOf(STRR [インデックス]))。// 根 node.left =デシリアライズ(STR)。// 左 node.right =デシリアライズ(STR)。// 右 } 戻りノード。 } }
レベルトラバース3。
// 使用トラバーサル順序は、完全なバイナリツリーのための簡単な方法に変換する必要はなく、 パブリック クラスのソリューション{ 文字列をシリアル化(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 ]。 } }