0

在这段代码中,我展示了存储在链表中的所有 File 对象。我以递归方式运行它,这让我可以探索整个二叉树。

我的工作是计算每个 File 对象位于树的哪个级别。

如何使用递归来做到这一点?我想只计算里面的变量,但是如果水平下降,我不知道在哪里减去这个值。

有任何想法吗?

public void display(T node)
{
    Node temp = node;

    if (temp != null)
    {
        display(temp.left);
        display(temp.right);
    }
}
4

2 回答 2

2

这看起来像是一个家庭作业/学习问题,所以这里有一些提示。

  • 你不需要这样的计数器。
  • 简洁的解决方案包括制作displayFiles一个简单的非递归函数,该函数使用递归辅助函数来完成所有工作。当前级别是辅助函数的参数。

好的,所以这是一个解决方案的草图:

public void display(T node) {
    doDisplay(node, 0);
}

private void doDisplay(T node, int level) {
    if (node != null) {
        // output this node ... including the level
        display(node.left, level + 1);
        display(node.right, level + 1);
    }
}

请注意,变量没有递增和递减,因此这些方法是完全可重入的。

于 2012-11-07T03:38:46.363 回答
1

在函数开始时增加级别并在结束时减少它,就在最后一行之前

private static int level = 0;    
public void displayFiles(T node)
{
    Node temp = node;

    if (temp != null && temp.leftChild != null && temp.rightChild != null)
    {
     ++level;
        displayFiles(temp.leftChild);
        displayFiles(temp.rightChild);
    }
    --level;
}

我们将在它进入一个新节点时增加级别,并在它离开当前节点并转到其前任节点时减少它。

于 2012-11-07T03:09:56.403 回答