我有一个二叉搜索树,我想删除一个节点。
我需要得到它的父母,所以我写了一个函数:
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>
它强制我在函数的最后一行返回一个值。
如何在我的功能环境中修复它?
答案 0 :(得分:3)
您的功能在任何可能的情况下都没有回报。你有:
if (null)...
if (less than root)...
else ( if ...)
else (no return!)
如果它不为空,你会返回什么,然后去最后的其他地方?没有任何回报。
您可以在else语句中return getParent...
。或函数末尾的return null
(不在if或else语句中)
我经常看到这样的代码来覆盖if语句都没有返回值的事件。
public int getAnswer()
{
if (answer.equals("yes"))
return 0;
else if (answer.equals("no"))
return 1;
return null;
}
答案 1 :(得分:2)
你应该对此很好:
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
return getParent(root.getLeft(), node);
} else {
if(root.getRight() != null && root.getRight().element().equal(node.element()))
return root;
else
return getParent(root.getRight(), node);
}
}
答案 2 :(得分:-1)
添加返回null;方法结束时的陈述。 我认为这个语句在正常情况下是无法访问的,但添加它只是为了修复编译错误并尝试将会发生什么。
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);
}
return null;
}