递归如何在树中工作?

问题描述

我正在遍历一棵树,想知道递归在树内如何工作,因为代码看起来很简单,但是当我调试代码时,我感到困惑,因为我对递归的工作,那么您可以解释一下吗?在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);
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...