I have a Person class, and I want to create a tree. Here is the contsructor for the Person class.
public Person(String name, int age, char gender, Person c1
Your code returns 0 if one of the children are null. This is incorrect because you don't account for the other child, or this. The count should always be >= 1 because you always have at least one node in the tree.
Also, you can't return right away if you see that one child is null. You need to count the other child too (if it exists).
Here is how I would implement it:
public int count() // total person count including this object
{
int count = 1; // we count this node as 1
if (child1 != null) // if we have a left child, count its size
count += child1.count();
if (child2 != null) // if we have a right child, count its size
count += child2.count()
return count;
}
You need to account for both children, even if one of them is null.
private int count() {
return 1 + ((this.child1 != null) ? (this.child1.count()) : (0)) + ((this.child2 != null) ? (this.child2.count()) : (0));
}
The result is wrong because you return 0 when a child is null forgetting to count the node itself or the other child.. if it's a leaf node (child1 == null && child2 == null) you should anyway return 1.
Something like:
return 1 + (child1 == null ? 0 : child1.count()) + (child2 == null ? 0 : child2.count())
following your original code it would be something like:
if (child1 == null && child2 == null)
return 1;
else if (child1 == null)
return 1 + child2.count();
else if (child2 == null)
return 1 + child1.count();
else
return 1 + child1.count() + child2.count();
but in that case I would say to stick with jjnguy answer which calculates the result partially..