问题描述
我正在遍历一棵树,想知道递归在树内如何工作,因为代码看起来很简单,但是当我调试代码时,我感到困惑,因为我对递归的工作,那么您可以解释一下吗?在c#中查看我的代码
public static void Traverse(Node root)
{
if (root == null) return;
Console.WriteLine(root.data);
Traverse(root.left);
Traverse(root.right);
}
解决方法
当我尝试解决二叉树的问题时,我发现它有助于准确跟踪特定节点的输入和存在时间(何时将其推入调用栈并从调用栈中弹出)。这类似于Lasse V. Karlsen的建议,但直接在代码中完成。您将用于任务的任何其他代码(例如交换左右子节点,收集所有访问的节点的总和等)都必须在两个日志之间进行,并且可能应该有自己的日志,以便您可以看到在可能发生错误的确切节点上。例如:
static ArrayList results = new ArrayList();
public static void Traverse(Node root)
{
if (root == null)
return;
Console.WriteLine("Entering",root.data);
results.Add(root.data);
Console.Write("Current Results: ");
foreach(int i in results) {
Console.Write(i + " ");
}
Console.WriteLine("");
Traverse(root.left);
Traverse(root.right);
Console.WriteLine("Exiting",root.data);
}