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..