2016-07-21 2 views
0

バイナリ検索ツリーのシリアライズとデシリアライズに関する標準的なインタビューの問題を解決しようとしています。元のBSTは、すべてのヌルインスタンスで-1としてデリミタをトラバースするプリオーダを使用してシリアル化されています。 これはシリアライズされたツリーです。BSTのシリアライズと逆シリアル化

1297-1-110-1-11413-1-117-1-19 

これはこれは、しかし、正しい出力が得られない

public static Node deserialize(List<Integer> list){ 
     int index = 0; 
     return deserialize(list, index); 
    } 

    private static Node deserialize(List<Integer> list, int index) { 
     if(index == list.size()){ 
      return null; 
     } 
     if(list.get(index) == -1){ 
      index++; 
      return null; 
     } 
     Node root = new Node(list.get(index++)); 
     root.setLeft(deserialize(list, index)); 
     root.setRight(deserialize(list, index)); 

     return root; 
    } 

、BSTをデシリアライズするために私のコードです。デバッグでは、関数のフォールドアウト時にインデックスの値が元の値に戻ってしまい、結果が間違っていることがわかりました。コールスタック全体でインデックス値を維持できる方法はありますか?どんな助けもありがたい。

+0

これはデバッグサービスではありません。 – Raedwald

答えて

0

オプション1

メイクパラメータクラスのフィールド。

public class Deserializer { 
    private int index = 0; 
    public Node deserialize(List<Integer> list) { 
     ... 
    } 
} 

オプション2

戻り方法からパラメータ。

public class DeserializationResult { 
    private Node node; 
    private int index; 
    ... constructor and getters ... 
} 

再帰呼び出しが行われるたびに、ローカル変数を再帰呼び出しの結果で更新します。

public DeserializationResult deserialize(List<Integer> list, int index) { 
    ... 
    DeserializationResult leftResult = deserialize(list, index); 
    index = leftResult.getIndex(); 
    ... 
} 
関連する問題