如何从未排序的双向链接列表创建树

时间:2017-12-21 12:38:37

标签: java data-structures

我正在努力为未排序的LinkList创建一个Tree,其中每个Node包含三个实例变量

  1. ID
  2. 数据
  3. parentId的
  4. 和LinkList是数据类型节点,只需要具有子和父关系的基本树,就不需要特定类型的树

1 个答案:

答案 0 :(得分:0)

让我们以一个例子开始研究这个问题。

以下是提供给我们的清单数据

Pojo{id=4, parent_id=2, name=C} 
Pojo{id=5, parent_id=2, name=D} 
Pojo{id=7, parent_id=3, name=E} 
Pojo{id=6, parent_id=3, name=F} 
Pojo{id=8, parent_id=6, name=FB} 
Pojo{id=1, parent_id=0, name=root} 
Pojo{id=2, parent_id=1, name=A} 
Pojo{id=3, parent_id=1, name=B}

我们假设在上述情况下我们已获得列表的大小,即7

现在根据作者在评论中提供的信息,我假设这是一个Pojo对象列表,即List<Pojo> pojoObjects;

现在我们将树(图)存储在这样的数据结构中 - ArrayList<ArrayList<Pojo>> finalTree = new ArrayList<ArrayList<Pojo>>(7);

现在我们可以迭代我们的列表 - pojoObjects然后我们可以检查父ID是什么,并将这个特定的Pojo对象添加到该列表元素。

这样的事情: -

for(Object pojo: pojoObjects) {
    int parentId = pojo.parent_id;
    ArrayList<Pojo> atThisIndex = finalTree[parentId];
    atThisIndex.add(pojo);
    finalTree[parentId] = atThisIndex;
}

现在在这个循环之后,我们的输出看起来像这样: -

0 -> Pojo{id=1, parent_id=0, name=root}
1 -> Pojo{id=2, parent_id=1, name=A} , Pojo{id=3, parent_id=1, name=B}
2 -> Pojo{id=4, parent_id=2, name=c} , Pojo{id=5, parent_id=2, name=D}
3 -> Pojo{id=7, parent_id=3, name=E} , Pojo{id=6, parent_id=3, name=F}
4 -> {}
5 -> {}
6 -> {}
7 -> {}

希望这有帮助!