使用递归添加到变量

时间:2016-02-18 21:21:32

标签: java recursion red-black-tree

下面的代码是使用私有方法添加到变量count。在该变量下面是条件,根据我的理解,在递归堆栈跟踪upword之前不会运行。我对么?我的测试失败了,我试图看看是不是因为我的代码错了或我使用了递归错误。

public boolean containsRightRedEdge() {
    int count = 0;
    count += containsRightRedEdge(root);
    if(count > 0) return true;
    return false;
}

private int containsRightRedEdge(Node n) {
   if (n == null) return 0;
   if (isRed(n.right)) {
       return 1;
   }
   return containsRightRedEdge(n.left) + 0 + containsRightRedEdge(n.right);         
}

2 个答案:

答案 0 :(得分:2)

我会说你正确使用递归,但是你选择的方法名称可能不那么令人困惑,你的逻辑可以简化。 我对你想要实现的算法不太熟悉,但你可能会尝试这样的事情:

public boolean containsRightRedEdge(Node root) {
   return getNumRightRedEdges(root) > 0;
}

private int getNumRightRedEdges(Node n) {
   if (n == null) return 0;
   if (isRedEdge(n)) return 1;

   return getNumRightRedEdges(n.left) + getNumRightRedEdges(n.right);
}

通常,递归方法不应与非递归方法具有相同的名称。这些方法名称可以更清楚地传达每个方法的作用。你的基础案例可能也是错的,因为你现在根据我解释算法应该如何工作来编写它们。当然,我不知道isRed()中的代码,所以我可能在这里做出错误的假设。

答案 1 :(得分:0)

我的问题上面的代码是在这个实例中使用递归的正确方法。我刚刚得到一个错字,现在已经解决了。留下问题供其他人参考。