Help with tree recursion

后端 未结 3 2073
醉酒成梦
醉酒成梦 2021-01-15 16:43

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         


        
相关标签:
3条回答
  • 2021-01-15 17:15

    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.

    0 讨论(0)
  • 2021-01-15 17:18
    private int count() {
        return 1 + ((this.child1 != null) ? (this.child1.count()) : (0)) + ((this.child2 != null) ? (this.child2.count()) : (0));
    }
    
    0 讨论(0)
  • 2021-01-15 17:25

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

    0 讨论(0)
提交回复
热议问题