2015-02-24 76 views
0

我在DB中有一些值如下 這裏的父節點是父節點,子節點是子節點。如何檢索數據庫值並將其存儲爲樹數據結構?

gid  parent child clientid 

1   ABC  ABC  1 
2   ABC  PQR  1 
3   PQR  c1  1 
4   PQR  c2  1 
5   PQR  c3  1 
6   ABC  XYZ  1 
7   XYZ  EFG  1 
8   EFG  c4  1 
9   EFG  c5  1 

這是一棵樹的數據,在這裏爲我的計算,如果父母和孩子是相同的,我把它作爲樹的根。

我做我自己的樹數據結構到所有值存儲爲,

public class Tree<T> { 

    private T head; 

    private ArrayList<Tree<T>> leafs = new ArrayList<Tree<T>>(); 

    private Tree<T> parent = null; 

    private HashMap<T, Tree<T>> locate = new HashMap<T, Tree<T>>(); 

    public Tree(T head) { 
     this.head = head; 
     locate.put(head, this); 
    } 
} 

我有添加節點到樹方法爲addleaf()Tree工作正常。問題是我必須從數據庫檢索數據並將其存儲在Tree類型中。爲此,我已經這樣做了。

Tree<String> t=null; 
Statement s = conn.createStatement(); 
ResultSet rs = s.executeQuery("select * from bus_serverdb.groupdet where client_id='"+ uid + "'"); 
while (rs.next()) {   
    String parent = rs.getString("parent"); 
    String child = rs.getString("child"); 
    if(parent.equals(child)) { 
     t=new Tree<String>(parent);//creates new tree with parent as root node 
    } 
} 

所以,現在我在這裏停留,我沒有得到如何通過DB數據遍歷並將其添加到Tree類型。任何人都可以幫助我。

+0

你真的在DB中有'parent = ABC,child = ABC'嗎? – 2015-02-24 11:05:20

+0

沒有行,這是DB中的第一行 – Raghu 2015-02-24 11:06:59

+0

是的,對不起,我還沒有讀完。 「ABC」是樹的根。 – 2015-02-24 11:09:19

回答

0

如果能夠獲取(父母,子女),父母分組值,則while (rs.next())循環內初始化的邏輯是:

  • (父母,子女)
  • 找到節點樹
  • 所有(父母,子女)具有相同父母
    • 創建一個新的子節點並將其添加到父節點
    • (子值,子節點)添加到助手location

在你Tree類,我會分開持有根節點的TreeNode類,其中值爲,父母兒童(類型List<Node<T>>)。

此外,我認爲locate散列映射應該是Tree的一部分,但不是Node。我認爲它是一個幫助函數,通過名稱快速找到Node,並將節點名稱視爲唯一。

+0

可以請你展示一些代碼片段 – Raghu 2015-02-26 09:25:46

相關問題