gpt4 book ai didi

java - Java中如何检查ArrayList树是否为空?

转载 作者:行者123 更新时间:2023-12-02 19:20:59 25 4
gpt4 key购买 nike

我正在用 Java 创建一棵树。当我创建一个方法来检查树是否为空时,它无法正常工作。当我调试程序并进入检查 root 是否为空的 if 语句时,我不断收到“parent = null”。我认为问题可能是由于父集方法造成的,但我不确定。这是我的代码:

{
private Tree data = null; //create a tree
private List<GeneralTree> children = new ArrayList<>(); //create an arraylist
private GeneralTree parent = null; //create a parent
public GeneralTree(Tree data) //constructor
{
this.data = data;
}
public void addChild(GeneralTree child) //create a child method to create a child
{
child.setParent(this);
this.children.add(child);
}
public void addChild(Tree data) //create a method to put data into the children
{
GeneralTree<Tree> newChild = new GeneralTree<>(data);
this.addChild(newChild);
}
public void addChildren(List<GeneralTree> children) //create a method to add children to a parent
{
for(GeneralTree t: children)
{
t.setParent(this);
}
this.children.addAll(children);
}
public List<GeneralTree> getChildren() //get the children
{
return this.children;
}
public Tree getData() //get the data in the children
{
return data;
}
public void setData(Tree data) //set the data of the children together
{
this.data = data;
}
public void setParent(GeneralTree parent) //set the parent together
{
this.parent = parent;
}
public GeneralTree getParent() //get the parent
{
return this.parent;
}

我遇到问题的 Main isEmpty() 方法

    public boolean isEmpty()
{
if(this.parent == null) //check if value is null. if it is true, the tree is full.
{
System.out.println("The tree is empty.");
return false;
}
else
{
return true;
}
}

驱动类的主要方法

    public static void main(String[] args)
{
GeneralTree<String> root = new GeneralTree<>("Root"); //create a root node

if(root.isEmpty())
{
if(true)
{
System.out.println("The tree is empty.");
}
}
GeneralTree<String> child1 = new GeneralTree<>("Child 1"); //first child node
child1.addChild("Grandchild 1"); //first grandchild node
child1.addChild("Grandchild 2"); //second grandchild node
GeneralTree<String> child2 = new GeneralTree<>("Child 2"); //second child node
child2.addChild("Grandchild 3"); //third grandchild node
root.addChild(child1);
root.addChild(child2);
root.addChild("Child 3"); //third child node
root.addChildren(Arrays.asList(new GeneralTree<>("Child 4"), new GeneralTree<>("Child 5"), new GeneralTree<>("Child 6")));//add fourth, fifth, and sixth children nodes
for(GeneralTree node: root.getChildren()) //get and print the children as long as they're under the root
{
System.out.println(node.getData()); //get the data
}
}
}

不知道是父节点的问题还是isEmpty()方法的设计问题?

最佳答案

你的 isEmpty() 方法对我来说似乎没有意义。

它询问父级是否为空。这和空有什么关系?

“父项是否为空?”意思是“我是根吗?”。

或者换句话说 - 根永远没有父级,因此根据您的测试, root.isEmpty() 永远为真。

按照我的思维方式,“空树”意味着“没有子节点”(如果可能的话,“这里没有数据”)。

关于java - Java中如何检查ArrayList树是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63064371/

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