了解递归打印二叉树的方法
本文关键字:方法 二叉树 打印 递归 了解 | 更新日期: 2023-09-27 18:14:06
我正在逐步执行这个YouTube教程中的代码,无法理解递归Print函数:
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
条件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);
}
第一次真正深入研究递归。有人能告诉我为什么吗?
写完这篇文章后,答案变得很清楚了。程序跳转回
行的原因 Print(N.left, ref s);
是递归调用的起始位置。一旦输入参数Node N
不再包含右节点,程序就退出该方法的迭代。也许有人能更好地解释这一点,所以我将离开这个帖子,没有选择答案。