2010-12-02 92 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