I'm creating a tree in Java. And when I create a method to check if the tree is empty, it doesn't work correctly. When I debug the program, and get to the if statement that checks if root is empty or not, I keep getting "parent = null". I think the problem may be due to the parent set method, but I'm not sure. Here's my code:
{
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() method that I'm having trouble with
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 Method to drive the class
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
}
}
}
I don't know if the issue is with the parent node or the design of the isEmpty() method?