2016-12-25 83 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

如果我理解思維方式,「非靜態」的內部類有特定的生活(隱藏的父母「這個」引用等),而「靜態」生活是正常的。 –

回答

4

檢查完成代碼這裏沒有遞歸。

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

不會創建任何Node實例。它創建了26個元素的Node[]Node引用數組)。所有的引用都被初始化爲null。數組引用的實例必須在別處初始化。

如果,另一方面,你有一個成員初始化爲:

private Node n = new Node(); 

會導致無限遞歸一旦Node的第一個實例將被創建。

0

在您的代碼行中, 首先,您將在主要方法中使用put(val1,val2)命令插入值。

st.put(key, i); 

代碼線下面的put(val1,val2)方法,

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

根據此代碼行,遞歸else部分被調用另一個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();進行初始化。