树遍历解释是必需的

时间:2018-03-18 07:41:34

标签: java

空返回的目的是什么,需要一步一步解释,当执行printInorder(node.right)并且节点变为空时,然后控制将被转移。

 void printInorder(Node node)
        {   
            if (node == null)
                return;

            printInorder(node.left);


            System.out.print(node.key + " ");


            printInorder(node.right);
    }

2 个答案:

答案 0 :(得分:0)

如果当前nodenode.leftnode.rightnull,则分别调用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。