我有这样的字符串值列表... A,A_AChild,A_AChild_furtherChild,A_BChild,A_CChild等。这些由'UnderScore'分隔的值表示A是父AChild是其子,AChild是FurtherChild的父。相似的BChild和CChild的父母是A.我需要创建一个类似树的结构来表示。
A
AChild
furtherChild
BChild
Child
我怎样才能做到这一点。任何算法或java程序都将受到高度赞赏。
答案 0 :(得分:0)
首先创建一个Node和一个树数据结构。
Node:
Node(String value)
Tree
Tree(Node node) : Creates a tree with root as node
Node getNode(Node node, String nodeToRetrive) nodeToRetrive will be a child of node
returns null if not found
Node addNode(Node node, String nodeToBeAdded) nodeToBeAdded will be added as a new child of node and the newly added Node would be returned
使用root创建树为A。
Node root=new Node("A");
Tree tree=new Tree(root);
将输入字符串拆分为“_”处的标记。例如,“A_AChild_furtherChild”将被分成“A”,“AChild”,“FurtherChild”。
String s="A_AChild_furtherChild";
String[] tokens=s.split("_");
从第二个开始循环标记,在本例中为“A Child”并进行必要的处理。
Node node=tree.root; Node n;
for( i=1 ;i <tokens.length; i++){
n=getNode(node,tokens[i]);
if(n==null){
n=addNode(node,tokens[i]);
}
node=n;
}
可以使用上面的循环构建整个树。
以递归方式检索树中节点的值。
public void printTree(Node n, int level){
display level number of spaces and print the value held by Node n.
for(each of the children of n){
printTree(theChild, level+1)
}
}
最初以下列方式调用上述递归方法:
printTree(root,0);
答案 1 :(得分:0)
我自己解决了这个问题..: - )
这是代码。我知道这可能效率不高:
Set<String> treeSet = new TreeSet<String>();
treeSet.add("FEES");
treeSet.add("FEES_NUSF");
treeSet.add("FEES_NUSF_NUS1");
treeSet.add("EXPE");
treeSet.add("EXPE_NUSE");
for (String string : treeSet) {
int splitSize = string.split("_").length;
if( splitSize > 1 ){
//log("In if : "+splitSize);
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < splitSize; i++) {
sb.append(" ");
}
sb.append(string);
print(sb.toString());
}
else{
print(string);
}
}