空返回的目的是什么,需要一步一步解释,当执行printInorder(node.right)
并且节点变为空时,然后控制将被转移。
void printInorder(Node node)
{
if (node == null)
return;
printInorder(node.left);
System.out.print(node.key + " ");
printInorder(node.right);
}
答案 0 :(得分:0)
如果当前node
,node.left
或node.right
为null
,则分别调用printInorder(node.left)
或printInorder(node.right)
应该只返回而不打印任何内容。因此if (node == null) return;
声明。
作为替代方案,您可以简单地避免在这种情况下进行递归调用:
void printInorder(Node node)
{
if (node.left != null) {
printInorder(node.left);
}
System.out.print(node.key + " ");
if (node.right != null) {
printInorder(node.right);
}
}
答案 1 :(得分:0)
我倾向于在更高的抽象层次上考虑递归方法。这样,它们应该更容易理解。
这里的问题是"打印节点的步骤是什么?#34;。如果你看一下方法的实现,答案很清楚:
如果节点不为null,则打印节点的左侧,然后是节点本身的值,后跟空格,然后是节点的右侧,否则不打印任何内容。
如果您要在打印节点时描述每个单步,那将需要更多的单词,但正如您所看到的,这个简单的定义很有意义,直截了当,完全有效。
我们需要return
的原因是,当我们打印的node
不存在时,唯一直观的做法就是不对它做任何事情,不是吗?它?实际上,当您尝试访问left
节点的null
时,这也会提供并结束递归并避免使用NPE。