树数据结构和数据

时间:2010-12-02 02:41:05

标签: c# data-structures tree

我碰巧有一个数据库,其中包含可能包含主题,动词和补语的所有可能组合的表格。

该表看起来像一个连接表,Id列映射到我的其他表(主题表,动词表,补充表)。

在我的程序中,我使用树结构来表示联结表,因此每个节点只是一个具有Id属性的对象(subjectId或verbId ...)。

我无法理解的是将Id映射到的实际数据放在何处。我虽然有两种选择:

  1. 使数据成为每个节点的属性
  2. 使数据成为节点
  3. 在第一种情况下,我唯一的处理是加载组合表并创建树。当我需要随附的数据时,我会按需加载它。但是为了跟踪树中的数据位置,数据具有指向它所属的节点的属性。(显然是为了避免必须搜索整个树(即使它只是一个O(log) n))操作)。此外,我将只处理整个程序中的一个节点,因为它是一种方便的方式来到那个节点的子节点。

    在第二种情况下,如果我要将实际数据一个节点,我必须在使用它之前立即加载所有数据。此外,如果“节点父节点兄弟姐妹”使用相同的数据,我仍然需要创建数据的副本。

    是否有一种干净的方式来实现我想要做的事情? 下面列出的是我目前所拥有的

    public class Node<Word>{
    
        public Word Data { get; set; }
    
        public Guid ID { get; set; }
    
        ..... // other necessary tree like stuff
    
    }
    
    public class Word
    {
        public Node NodeItem { get; set; }
    }
    

    或者

    public class Word : Node{}
    

    我希望这个问题足够明确。如果您需要更多详细信息,请告诉我,我会用它更新问题。 谢谢。

1 个答案:

答案 0 :(得分:0)

在任何情况下,在您提及的树中搜索都不会是O(logn),因为此树不是二叉搜索树。这是一个无向图,你可以这么说,你需要使用BFS或DFS进行搜索。

如果我正确地对您的情况进行成像,那么在UI上,您可以在窗口的左侧面板中看到一个树,并在右侧面板上显示节点的详细信息。

如果这是用户界面或您的情况,那么

我想说不要在树中存储数据,按需加载,即当用户选择节点时,您将获得该节点的ID,获取带有ID的数据并显示。

通过这种方式,您可以避免可能同时加载所有可能不需要的数据。