了解打印二叉树的递归方法

时间:2014-07-22 01:47:32

标签: c# recursion

我正在逐步完成代码from this YouTube教程,无法理解递归打印功能:

    public void Print(Node N, ref string s)
    {
        if (N == null) { N = top; }
        if (N.left != null)
        {
            Print(N.left, ref s);
            s = s + N.value.ToString().PadLeft(3);
        }
        else
        {
            s = s + N.value.ToString().PadLeft(3);
        }
        if (N.right != null)
        {
            Print(N.right, ref s);
        }
    }

我正在使用以下未排序的数组来填充树:

int[] unsortedArray = new int[] {5, 17, 11, 24, 3, 18, 9};

我理解通过Print方法的第一次传递,top值等于5.程序然后进入第一个条件并执行此递归调用

Print(N.left, ref s);

由于输入参数Node N现在是根的左边节点,它恰好是树中的最低值,因此它的左边节点是null,因此程序会进入else 1}}条件

else
{
     `s = s + N.value.ToString().PadLeft(3);    
}

我迷失的地方接下来会发生什么。对我来说,似乎由于此节点不包含正确的叶子,程序将评估if(N.right !=null)条件,然后退出Print方法。

相反,代码会评估if,然后在第一个条件中跳转到Print(N.left, ref s);行:

        if (N.left != null)
        {
            Print(N.left, ref s);
            s = s + N.value.ToString().PadLeft(3);
        }

第一次真正钻研递归。谁能告诉我为什么会这样?

1 个答案:

答案 0 :(得分:0)

写完这篇文章后,答案变得非常明确。程序跳回此行的原因

Print(N.left, ref s);

是递归调用发起的地方。一旦输入参数Node N不再包含右节点,程序就退出该方法的迭代。有人可能能够更好地解释这一点,所以我会在没有选定答案的情况下留下帖子。