从平面列表创建 java 层次结构树集

2023-11-25

我有对象 T 的列表,它有一个父属性,其中顶部对象的父属性为 null。我想将所有对象放入 TreeSet (或 TreeMap)中。顶级对象将是所有没有父对象(父对象为空)的根对象,并且它们下面将有子对象。

像这样的东西

              o
           /  |   \
          Ra  Rb   Rc          -- Level Root Objects
         / |   \    | \
        Ca1 Ca2 Cb1 Cc1 Cc2    -- Level of First Children
     /   \
   Ca11   Ca12..............   -- Level of Second Children

这样我就可以得到Ra并找到它的孩子(Ca1,Ca2,Ca11,Ca12......)

更新: 抱歉,可能不清楚,节点指向父节点,如果父节点为空,则它们是根节点。问题是父母需要了解孩子。但关系却是相反的。

class Node
{
  private Node parent;
  private String name;
} 

我想你可能不清楚什么是TreeSet在 Java 中是这样的。 ATreeSet只是一个实现Set接口,内部使用树。同样对于TreeMap。它不是一个通用的树结构,允许您从父级遍历到子级。它使用树的事实严格来说是内部实现的一个细节。

我知道你有一堆对象,每个对象都有一个对“父”对象的引用。这些“父”链接形成一棵树,但您希望从父项遍历到子项,而不是相反的方向(这很容易)。

在这种情况下,我可能会遍历对象列表并构建一个Map从父对象到List孩子的。就像是:

Map<Node,List<Node>> tree  = new HashMap<Node,ArrayList<Node>>();
List<Node>           roots = new ArrayList<Node>();
for(Node n : nodes) {
  if(n.parent == null)
    roots.add(n);
  else {
    if(!tree.containsKey(n.parent))
      tree.put(n.parent, new ArrayList<Node>());
    tree.get(n.parent).add(n);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从平面列表创建 java 层次结构树集 的相关文章

随机推荐