帮助树递归

时间:2010-11-06 20:12:56

标签: java recursion tree

我有一个Person类,我想创建一个树。这是Person类的contsructor。

public Person(String name, int age, char gender, Person c1, Person c2)

c1是左边的孩子,c2是右边的孩子。所以说我像这样创造三个人:

Person c = new Person("Carl", 50, 'M', null, f);

Person b = new Person("Barbara", 52, 'F', d, e);

Person a = new Person("Adam", 75, 'M', b, c);

所以在这里你说亚当是根节点,亚当的左边孩子是b,芭芭拉和他的右边c是卡尔,依此类推。

所以我想要做的是编写一个count方法,它计算包括this在内的子项数。所以a.count()将返回6(如果Person f没有任何子节点)。

所以这是我的代码:

public int count() // total person count including this object
{
    if(child1==null)
        return 0; //I tried return 1 for this too didnt work
    if (child2==null)
        return 0; //also tried 1 for this
    return 1+this.child1.count() +1+this.child2.count();
}

我在纸上运行了好几次,它应该会得到正确的结果,但是当我实际运行它时,由于某些原因它会被一些原因关闭。

3 个答案:

答案 0 :(得分:4)

结果是错误的,因为当一个子元素为空时返回0会忘记计算节点本身或另一个子节点..如果它是一个叶节点(child1 == null && child2 == null),你应该返回1。

类似的东西:

return 1 + (child1 == null ? 0 : child1.count()) + (child2 == null ? 0 : child2.count())

按照您的原始代码,它将类似于:

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();

但是在那种情况下我会说要坚持使用jjnguy的答案来部分计算结果。

答案 1 :(得分:4)

如果其中一个孩子是0,您的代码会返回null。这是不正确的,因为您没有考虑其他孩子,或this。计数应始终为>= 1,因为树中始终至少有一个节点。

此外,如果您发现一个孩子是null,则无法立即返回。你也需要计算另一个孩子(如果存在)。

以下是我将如何实现它:

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;
}

您需要考虑这两个孩子,即使其中一个是null

答案 2 :(得分:0)

private int count() {
    return 1 + ((this.child1 != null) ? (this.child1.count()) : (0)) + ((this.child2 != null) ? (this.child2.count()) : (0));
}