下面的代码是使用私有方法添加到变量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);
}
答案 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)
我的问题上面的代码是在这个实例中使用递归的正确方法。我刚刚得到一个错字,现在已经解决了。留下问题供其他人参考。