如何从返回值的函数中返回任何内容?

我有一个二叉搜索树,我想删除一个节点。

我需要得到它的父,所以我写了一个函数:

private BSTreeNode getParent(BSTreeNode root, BSTreeNode 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 

它强制我在函数的最后一行返回一个值。

如何在我的function上下文中修复它?

您的function在每种可能的情况下都没有回报。 你有:

 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; } 

你应该对此很好:

 private BSTreeNode getParent(BSTreeNode root, BSTreeNode 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); } } 

添加返回null; 方法结束时的陈述。 我认为这个语句在正常情况下是无法访问的,但添加它只是为了修复编译错误并尝试将会发生什么。

 private BSTreeNode getParent(BSTreeNode root, BSTreeNode 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; }