2016-07-21 3 views
0

이진 검색 트리를 직렬화 및 비 직렬화하는 표준 인터뷰 문제를 시도하고 있습니다. 원래 BST는 모든 null 인스턴스에서 -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 DeserializationResult deserialize(List<Integer> list, int index) { 
    ... 
    DeserializationResult leftResult = deserialize(list, index); 
    index = leftResult.getIndex(); 
    ... 
}