我有一个超类和一个子类,如下所示:
class Tree{
..
public void add(..){
//makes a call to protected function add(..)
}//for client to use.
protected TreeNode add(..){}//recursive function which calls itslef
}
class Stree extends Tree{
//overrides the recursive add function from class Tree
protected TreeNode add(..){
..
super.add();//calls the non-recursive add function in superclass.
}
}
这里的问题是,当我super.add()
从子类中的新 add 函数调用时,它转到Tree.add()
. 里面Tree.add()
。有一个调用add()
,它调用子类中的递归 add 函数而不是 super,即Stree.add()
,而不是Tree.add()
导致无限循环。各位看出来问题出在哪里了吗?
这是一项家庭作业,因此我无法更改递归函数的名称。我被明确要求向递归添加函数添加功能,而不重写任何现有代码,这基本上意味着我将不得不调用原始add()
函数。
编辑:Tree.add()//recursive 的代码。请注意,我无法修改此代码以获得我寻求的功能。
protected StreeNode add(StreeNode node, String value) {
if (node == null) {
node = new StreeNode(value);
numElements++;
} else if (node.data.compareTo(value) == 0) {
// do nothing, String was already in Set
} else if (node.data.compareTo(value) > 0) {
node.left = add(node.left, value); // x = change(x)
} else {
node.right = add(node.right, value); // x = change(x)
}
return node;
}
编辑:现在我看到这是预期的行为,我该如何实现以下目标:
- 使用原始递归添加值
add()
- 实现额外的功能