2016-11-10 20 views
0

私は面白いと私は最も簡単な作業ではないと理解している。階層を表す文字列のリストに基づくJavaオブジェクトのツリー

階層を表す文字列のリストに基づいてオブジェクトのツリーを作成する必要があります。例えば

、リスト内の文字列である(実際にはそれができる任意のグラフ):

List<String> hierarchies; 

1# 1#2# 1#2#3# 1#2#4# 私が持っている1#2#4#5#

クラス:

class Tree { 

    List<Tree> children; 

    // here is getter 

} 

私はいくつかの実装を持っていますが、唯一の開始のために。私はこのコードをどのように完成させるのか分かりません。あなたは自分のビジョンを私と共有できますか?

ありがとうございます!

Tree tree = null; 

for (String hierarchy : hierarchies) { 

    if (hierarchy.equals("1#")) { 
     tree = new Tree(); 
    } else { 
     tree.getChildren().add(new Tree()); 
    } 

} 

return tree; 
+1

入力した入力例では、ツリーをどのように表示するか(ASCIIアートで)イメージを描画できますか? – martijnn2008

答えて

0

解決策はたくさんあります。複雑さがなければ、次のようになります。

public void testHierarchy() { 

    List<String> hierarchies = new ArrayList<String>(); 

    hierarchies.add("1#"); 
    hierarchies.add("1#2#"); 
    hierarchies.add("1#2#3#"); 
    hierarchies.add("1#2#4#"); 
    hierarchies.add("1#2#4#5#"); 

    Tree root = new Tree(); 
    for (String hierarchy : hierarchies) { 
     String[] elHierarchy = hierarchy.split("#"); 
     processLevel(elHierarchy, root); 
    } 
} 

private void processLevel(String[] hierarchy, Tree rootTree) { 

    if (null == rootTree.getValue() || "".equals(rootTree.getValue())) { 
     rootTree.setValue(hierarchy[0]); 
    } 

    Tree nextChild = null; 
    for (Tree child : rootTree.getChildren()) { 
     if (child.getValue().equals(hierarchy[1])) { 
      nextChild = child; 
      break; 
     } 
    } 

    if (hierarchy.length > 1) { 
     if (null == nextChild) { 
      nextChild = new Tree(); 
      nextChild.setValue(hierarchy[1]); 
      rootTree.getChildren().add(nextChild); 
     } 
     String[] remainHierarchy = new String[hierarchy.length - 1]; 
     System.arraycopy(hierarchy, 1, remainHierarchy, 0, remainHierarchy.length); 
     processLevel(remainHierarchy, nextChild); 
    } 
} 

private static class Tree { 
    String value; 
    List<Tree> children = new ArrayList<SometestTest.Tree>(); 

    public List<Tree> getChildren() { 

     return children; 
    } 

    public String getValue() { 

     return value; 
    } 

    public void setValue(String value) { 

     this.value = value; 
    } 

} 

P.S.あまりにもエレガントでシンプルではない

+0

Vadim、それは本当に助けました。大いに感謝する! –

+0

いつでもようこそ – Vadim

関連する問題