2016-07-21 14 views
0

Ich versuche ein Standard Interview Problem Serialisierung und Deserialisierung eines binären Suchbaums. Die ursprüngliche BST wurde serialisiert, indem das Delimiter-Vororderzeichen bei jeder Nullinstanz als -1 verwendet wurde. Dies ist der serialisierte Baum.Serialize und Deserialize eine BST

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

Dies ist mein Code, um die BST deserialisieren,

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; 
    } 

jedoch Dies führt nicht die korrekte Ausgabe. Beim Debuggen wurde mir klar, dass der Wert des Index auf seinen früheren Wert zurückfällt, wenn die Funktion ausklappt und das falsche Ergebnis verursacht. Gibt es eine Möglichkeit, den Indexwert über den Call-Stack zu halten. Jede Hilfe wird geschätzt.

+0

Dies ist kein Debugging-Service. – Raedwald

Antwort

0

Option 1

Make-Parameter der Klasse ein Feld.

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

Option 2

Return der Parameter aus dem Verfahren.

Aktualisieren Sie die lokale Variable mit dem Ergebnis des rekursiven Aufrufs, wenn ein rekursiver Aufruf erfolgt.

public DeserializationResult deserialize(List<Integer> list, int index) { 
    ... 
    DeserializationResult leftResult = deserialize(list, index); 
    index = leftResult.getIndex(); 
    ... 
} 
Verwandte Themen