我正在逐步完成代码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);
}
第一次真正钻研递归。谁能告诉我为什么会这样?
答案 0 :(得分:0)
写完这篇文章后,答案变得非常明确。程序跳回此行的原因
Print(N.left, ref s);
是递归调用发起的地方。一旦输入参数Node N
不再包含右节点,程序就退出该方法的迭代。有人可能能够更好地解释这一点,所以我会在没有选定答案的情况下留下帖子。