【发布时间】:2013-12-16 22:22:55
【问题描述】:
我有一棵二叉搜索树,我想删除一个节点。
我需要得到它的父母,所以我写了一个函数:
private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
if(root == null)
return null;
if(node.element().lessThan(root.element())) {
if(root.getLeft() != null && root.getLeft().element().equal(node.element()))
return root;
else
getParent(root.getLeft(), node);
} else {
if(root.getRight() != null && root.getRight().element().equal(node.element()))
return root;
else
getParent(root.getRight(), node);
}
}
与 C/C++ 不同,Java 出现以下错误:
This method must return a result of type BSTreeNode<T>
它迫使我在函数的最后一行返回一个值。
如何在我的函数上下文中修复它?
【问题讨论】:
-
使用
return getParent... -
@SotiriosDelimanolis 并使用哪些参数?
-
我不知道,那是你设计的一部分。关键是如果您的返回类型不同于
void,您的方法必须始终返回一些内容。 -
C 和 C++ 编译器可能不会强制您为非 void 返回类型返回值,但这并不意味着它是“允许的”。如果函数在没有返回(或异常)的情况下终止,则结果未定义。 Java 只是特别热衷于执行此规则。
-
@SotiriosDelimanolis 哦,我的错。我困惑了一分钟,我必须在所有 else-if 块中返回值。非常感谢!