我正在尝试构建一个树,我想基于像下面那样的文件路径将父节点链接到子节点,其中世界是根:
The World
The World/Asia
The World/Asia/Afghanistan
The World/Asia/Iran
The World/Asia/China";
我想把它变成这样:
我采取的方法如下。我想知道是否有人能帮助我指出正确的方向。我不确定我的逻辑是否正确?
public void linkNodeToParent(String path, Node n)
{
String[] pathNodes = path.split("/");
Node parent = root;
for(int i = 0; i < pathNodes.length; ++i)
{
for(int j = 0; j < parent.getChildren().size(); ++j)
{
if(parent.getChildren().get(j).getNodeName().equals(pathNodes[i]))
parent = parent.getChildren().get(j);
}
}
}
答案 0 :(得分:6)
希望以下代码可以帮助您使用Tree
创建文件夹结构import java.util.*;
class Tree
{
class Node
{
String data;
ArrayList<Node> children;
public Node(String data)
{
this.data = data;
children = new ArrayList<Node>();
}
public Node getChild(String data)
{
for(Node n : children)
if(n.data.equals(data))
return n;
return null;
}
}
private Node root;
public Tree()
{
root = new Node("");
}
public boolean isEmpty()
{
return root==null;
}
public void add(String str)
{
Node current = root;
StringTokenizer s = new StringTokenizer(str, "/");
while(s.hasMoreElements())
{
str = (String)s.nextElement();
Node child = current.getChild(str);
if(child==null)
{
current.children.add(new Node(str));
child = current.getChild(str);
}
current = child;
}
}
public void print()
{
print(this.root);
}
private void print(Node n)
{
if(n==null)
return;
for(Node c : n.children)
{
System.out.print(c.data + " ");
print(c);
}
}
public static void main(String[] args)
{
Tree t = new Tree();
t.add("The World");
t.add("The World/Asia");
t.add("The World/Asia/Afghanistan");
t.add("The World/Asia/Iran");
t.add("The World/Asia/China"); // Even if you insert only this statement.
// You get the desired output,
// As any string not found is inserted
t.print();
}
}
答案 1 :(得分:0)
考虑使用新的NIO.2 API。
每个节点都可以包含一个Path对象。
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Paths.html
答案 2 :(得分:0)
如果你在每一端添加一个反对“/”,正如我们在聊天中谈到的那样,那么这个程序将会起作用
void split()
{
String path=
"The World/"+
"The World/Asia/"+
"The World/Asia/Afghanistan/"+
"The World/Asia/Iran/"+
"The World/Asia/China/";
String[] pathNodes = path.split("/");
// for(String s:pathNodes)
// {
// System.out.println(s);
// }
String root="The World";
String continent="Asia";
List<String> ls=new ArrayList<String>();
for(int i=0;i<pathNodes.length;i++)
{
if(pathNodes[i].equals(root))
{
if(pathNodes[i+1].equals(continent))
{
ls.add(pathNodes[i+2]);
}
}
}
for(String s:ls)
{
System.out.println(s);
}
}