广度优先搜索表示树结构的列表

时间:2015-01-28 09:57:41

标签: algorithm list tree breadth-first-search

我正在尝试开发一种算法,该算法可以读取包含一些数据的字典键列表。

读入应用程序的列表示例

ID: 1 Level: 0 Data:"Animal"
ID: 2 Level: 1 Data:"Dog"
ID: 3 Level: 1 Data:"Cat"
ID: 4 Level: 1 Data:"Sheep"
ID: 5 Level: 2 Data:"Collie"
ID: 6 Level: 2 Data:"Dalmation"
ID: 7 Level: 3 Data:"Tabby"
ID: 8 Level: 4 Data:"Suffolk"
ID: 9 Level: 5 Data:"Jimmy"
ID: 10 Level: 6 Data:"Sally"

现在,如果我想搜索" Sally"程序将通过树结构读取返回:

  

莎莉是一种类型达尔马的狗

这可以通过以下逻辑计算:

Animal位于树的顶部,DogCatSheep构成了下一个级别。 然后将Level 2分配给Level 1的第一个元素,Level 3分配给Level 1的第二个元素,Level 4分配给Level 1的第三个元素。由于Level 1已经填写了I进入下一个级别;在这种情况下,级别2.级别2有2个元素,因此级别5应用于第一个元素,级别6应用于第二个元素,在这种情况下SallyDalmation的子级这是Dog 的孩子。

我认为广度优先搜索算法效果最好,因为较低的ID总是位于树上某个级别的左侧。我需要能够搜索树以查找值输入(在本例中为Sally),然后在树中查找与树顶部直接链接的其他值(Animal )。

1 个答案:

答案 0 :(得分:0)

使用bfs / dfs来回答一个查询,说找到“Sally”就足够了。您将需要一个哈希表 H ,这样当遍历树并且您在一个节点上说 x 时,只需在哈希表中存储 x , H [x] =父(x)。另请注意,您可以将根节点的父节点标记为root本身或某些值(例如-1),然后使用-1。您可以使用bfs / dfs在遍历时查找填充哈希表的节点。现在,如果您收到“Sally”查询,请在使用bfs / dfs(不包含在伪代码中)后找到“Sally”之后执行以下操作:(它的伪代码不是特定语言)

           search_element = sally // element to be searched
           list=[] // empty list
           while H[search_element]! = -1
                list.append(H[search_element])
                search_element = H[search_element]

你的清单看起来像 [动物,狗,dalmation] 所以你可以从一开始就说,莎莉是一种动物,它是一只狗,它是一种愚蠢。(或者你想要的任何顺序,因为你的树顺序有点混乱)。