【发布时间】:2020-07-23 23:05:38
【问题描述】:
我正在用 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;
}
我遇到问题的主要 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;
}
}
驱动类的Main方法
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()方法的设计问题?
【问题讨论】: