2010-12-02 89 views
0

我碰巧有一個數據庫,其中包含主題,動詞和補語所有可能的組合。樹數據結構和數據

該表看起來像一個Id列映射到我的其他表(主題表,動詞表,補充表)的聯結表。

在我的程序中,我使用樹結構來表示聯結表,並且每個節點因此只是具有Id屬性(subjectId或verbId ...)的對象。

但我不明白,但是在哪裏把Id地圖的實際數據。不過,我覺得我有兩個選擇:

  1. 使數據的每個節點
  2. 的屬性使數據節點

在第一種情況下,我做的只是處理加載組合表並創建樹。當我需要數據時,我會根據需要加載它。但爲了跟蹤樹中的數據位置,數據有一個屬性指向它所屬的節點(顯然,爲了避免搜索整棵樹(即使它只是一個O(log( ),另外,我只會在整個程序中處理一個節點,因爲它是到達節點的子節點的一種方便的方式。

在第二種情況下,如果我要實際數據一個節點,我將不得不一次加載所有的數據,然後才消耗它。此外,如果「節點父同胞」使用相同的數據,我仍然需要創建一份數據副本

有沒有一種乾淨的方式來實現我想要做的事情? 下面列出的是什麼我現在有

​​

或者

public class Word : Node{} 

我希望,這個問題是非常明顯的。讓我知道你是否需要更多的細節,我會用它更新問題。 謝謝。

回答

0

在你提及的樹中搜索不會是O(logn),因爲這棵樹不是二叉搜索樹。這是一個無向圖,你可以這樣說,所以你需要通過使用BFS或DFS進行搜索。

如果我正確地對您的情況進行了成像,那麼在UI上,您將在窗口的左側面板中顯示一棵樹,並在右側面板上顯示該節點的詳細信息。

如果是這樣的UI或你的情況,然後

我要說不存儲需求,即在樹中的數據,負載當用戶選擇一個節點,那麼你將有一個節點的ID,取帶有ID和顯示的數據。

這樣,您可以避免一次可能不需要的所有數據的可能加載。

+0

哎呀!事實上它不是一棵二叉樹..! :-) – ak3nat0n 2010-12-02 04:48:01