gpt4 book ai didi

java - 开发树结构

转载 作者:行者123 更新时间:2023-12-01 15:05:07 25 4
gpt4 key购买 nike

请有人帮忙!!我是 Java 新手。我想从数组列表中创建一个树结构。我的输入是

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

等等。

请在下面找到我的类(class)。我在 test.tree.Node.addChild(Node.java:28) 处得到一个 nullPoniter,我知道这是因为“ child ”为空,但我不知道如何第一次设置 child 。请帮忙...:(

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;
}
}

和节点类

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;
}
}

测试类是

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;
}

}

最佳答案

Node 类的两个构造函数中,在 super 调用之后添加以下语句:-

children = new ArrayList<Node>();

这将实例化您的列出子项

public Node() {
super();
this.children = new ArrayList<Node>();
}

public Node(String name)
{
super();
this.children = new ArrayList<Node>();
this.data=name;
}
<小时/>

此外,您还可以更改 1-arg 和 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();
}

附注:-

如果您只想调用父类(super class) 0-arg 构造函数,则无需显式添加 super() 调用。编译器默认添加此调用。

关于java - 开发树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com