请来人帮帮忙!!我是爪哇新手。我想从一个数组列表中创建一个树形结构。我的输入是
1.1
1.2
1.3
1.3.1.1
1.3.1.2
1.4
1.4.1.1
1.4.2.1我的目标是得到一个像这样的树
1.1
1.2
1.3
1.4 1.3.1.1
1.4.1.1 1.5 1.3.1.2
1.4.1.2诸若此类。
请在下面找到我的课程。我在test.tree.Node.addChild(Node.java:28)得到了一个孩子,我知道这是因为‘nullPoniter’是空的,但我不知道如何第一次设置孩子。请帮帮我。:(
public class Tree {
private Node root;
public Tree(String rootData)
{
root=new Node();
root.data=rootData;
root.children=new ArrayList<Node>();
}
public Tree() {
super();
}
public Node getRoot(){
return this.root;
}
public void setRoot(Node rootElement) {
this.root = rootElement;
}
}和Node类
class Node {
String data;
Node parent;
List<Node> children;
public Node() {
super();
}
public Node(String name)
{
super();
this.data=name;
}
public void addChild(String name) {
this.addChild(new Node(name));
}
public void addChild(Node child) {
this.children.add(child);
}
public void removeChild(Node child) {
this.children.remove(child);
}
public void removeChild(String name) {
this.removeChild(this.getChild(name));
}
public Node getChild(int childIndex) {
return this.children.get(childIndex);
}
public Node getChild(String childName) {
for (Node child : this.children) {
if (child.data.equals(childName)) { return child; }
}
return null;
}
public List<Node> getChildren() {
if (this.children == null) {
return new ArrayList<Node>();
}
return this.children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
public Node getParentNode() {
return this.parent;
}
}而Test类是
public class TreeTest {
public static void main(String[] args) {
TreeTest tt = new TreeTest();
ArrayList<String> newArr= new ArrayList<String>();
newArr.add("1.1");
newArr.add("1.2");
newArr.add("1.3");
newArr.add("1.3.1.1");
newArr.add("1.3.1.2");
newArr.add("1.4");
newArr.add("1.4.1.1");
newArr.add("1.4.2.1");
int lCount=0;
int maxCount= newArr.size();
Tree tr= new Tree();
Node rootNode = new Node();
String parent_name=null;
Node currentNode= new Node();
for(String line: newArr){
if(lCount==0){
rootNode = tt.getTree(line);
tr.setRoot(rootNode);
currentNode= rootNode;
}
else{
List<Integer> cur = new ArrayList<Integer>();
List<Integer> pre = new ArrayList<Integer>();
cur= tokenize(line);
pre= tokenize(newArr.get(lCount-1));
if(cur.size()==pre.size()){
currentNode.addChild(tt.getTree(line));
currentNode= tt.getTree(line);
}
else if (cur.size()>pre.size()){
currentNode.addChild(tt.getTree(line));
parent_name= newArr.get(lCount-1);
currentNode= tt.getTree(line);
}
else if(cur.size()< pre.size()){
currentNode= tt.getTree(parent_name);
currentNode.addChild(tt.getTree(line));
currentNode= tt.getTree(line);
}
}
lCount++;
}
}
private Node getTree(String string) {
// TODO Auto-generated method stub
Node rootNode = new Node(string);
return rootNode;
}
private static List<Integer> tokenize(String line) {
// TODO Auto-generated method stub
List<Integer> line_Arr = new ArrayList<Integer>();
String[] tokens = line.split("\\.");
int i=0;
for(String atr: tokens)
line_Arr.add(Integer.parseInt(atr));
return line_Arr;
}}
发布于 2012-10-25 21:09:16
在Node类的两个构造函数中,在super调用后添加以下语句:-
children = new ArrayList<Node>();这将实例化您的List children。
public Node() {
super();
this.children = new ArrayList<Node>();
}
public Node(String name)
{
super();
this.children = new ArrayList<Node>();
this.data=name;
}此外,您还可以将您的1-arg and 0-arg Tree构造函数从:
public Tree(String rootData)
{
root=new Node();
root.data=rootData;
root.children=new ArrayList<Node>();
}
public Tree() {
super();
}下面的示例,它将使用参数化构造函数实例化Node:
public Tree(String rootData) {
root=new Node(rootData);
}
public Tree() {
root = new Node();
}P.S:-
如果您只想调用超类0-arg构造函数,则不需要显式添加super()调用。编译器默认情况下会添加此调用。
https://stackoverflow.com/questions/13069290
复制相似问题