Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java中的唯一代码列表构建树结构_Java_Algorithm_Recursion - Fatal编程技术网

从java中的唯一代码列表构建树结构

从java中的唯一代码列表构建树结构,java,algorithm,recursion,Java,Algorithm,Recursion,我有这样的字符串值列表…A,A_-AChild,A_-AChild\u-FurthChild,A_-BChild,A_-CChild等。这些值用下划线分隔表示A是父对象,A是其子对象,A_-AChild是其子对象的父对象。类似地,BChild和CChild的父级是A。我需要创建一个树状结构来表示 A AChild furtherChild BChild Child 我怎样才能做到这一点。任何算法或java程序都将受到高度赞赏。首先创建一个节点和一个树数据结构 Node: Node(S

我有这样的字符串值列表…A,A_-AChild,A_-AChild\u-FurthChild,A_-BChild,A_-CChild等。这些值用下划线分隔表示A是父对象,A是其子对象,A_-AChild是其子对象的父对象。类似地,BChild和CChild的父级是A。我需要创建一个树状结构来表示

A
 AChild
  furtherChild
 BChild
 Child

我怎样才能做到这一点。任何算法或java程序都将受到高度赞赏。

首先创建一个节点和一个树数据结构

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
创建以根为根的树

Node root=new Node("A");
Tree tree=new Tree(root);
将输入字符串拆分为“\”处的标记。例如,“A_AChild_FutureChild”将被分为“A”、“AChild”、“FutureChild”

从第二个标记开始循环标记,在本例中为“子标记”,并进行必要的处理

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;
}
上述递归方法最初将通过以下方式调用:

printTree(root,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);
            }
        }
Set treeSet=new treeSet();
treeSet.添加(“费用”);
treeSet.添加(“费用”);
树集。添加(“费用”);
树集。添加(“费用”);
树集。添加(“费用”);
for(字符串:树集){
int splitSize=string.split(“”).length;
如果(拆分大小>1){
//登录(“如果:+splitSize,则登录);
StringBuilder sb=新的StringBuilder(“”);
对于(int i=0;i
你想过什么方法吗?我甚至想不出用最一般的方法来做-(然后给你空闲的大脑施加一些压力。让它投入工作。想出一些方法。然后只有别人能帮助你。请自己做作业。请阅读和,以获得关于如何写问题的指示。你必须努力解决问题。如果这是一门课,而你不知道如何开始,你应该问y。)我们的教授或助教。我想我们要说的是查找一个叫做“树”的数据结构。关键字在你的问题中。
printTree(root,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);
            }
        }