2016-12-25 6 views
2

내가 트리는 데이터 구조를 조사하고 난 논리를 이해 재귀 내부 정적 클래스를 초기화하는 방법은 무엇입니까? 무엇을 깊이 노드가 초기화 얻을 것이다 위해,

// R-way trie node 
    private static class Node { 
     private Object val; 
     private Node[] next = new Node[26]; 
    } 

코드

의 조각을 건너왔다,하지만 난하지 않는 무엇인가?

여기에는 재귀가 없습니다 http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/TrieST.java.html

+0

"비 정적"내부 클래스는 특정 생명 (숨겨진 부모 "this"참조 등)을 가지고 있으며 "정적"수명은 정상입니다. –

답변

4

에서 전체 코드를 확인할 수 있습니다.

private Node[] next = new Node[26]; 

Node 인스턴스를 만들지 않습니다. 26 요소의 Node[] (배열 Node 참조) 만듭니다. 모든 참조는 null로 초기화됩니다. 배열에서 참조하는 Node 인스턴스는 다른 위치에서 초기화해야합니다. Node의 첫 번째 인스턴스가 만들어집니다 일단 무한 재귀를 야기

private Node n = new Node(); 

:

는 만약, 다른 한편으로는, 당신은 구성원으로 초기화했다.

0

코드 줄에서 먼저 주 방법에서 put(val1,val2) 명령을 사용하여 값을 삽입하고 있습니다. 아래 put(val1,val2) 방법

st.put(key, i); 

코드 라인

public void put(String key, Value val) { 
     if (val == null) delete(key); 
     else root = put(root, key, val, 0); 
    } 

이 코드 라인을 따라 순환 다른 부분

아래 put(val1,val2,val3,val4) 방법에 대한 다른 put(val1,val2,val3,val4) 방법을

코드 라인을 촉구

private Node put(Node x, String key, Value val, int d) { 
     if (x == null) x = new Node(); 
     if (d == key.length()) { 
      if (x.val == null) n++; 
      x.val = val; 
      return x; 
     } 
     char c = key.charAt(d); 
     x.next[c] = put(x.next[c], key, val, d+1); 
     return x; 
    } 

여기서, x==null 다음 노드 객체는 new Node();을 사용하여 초기화됩니다.