【发布时间】:2014-07-28 04:07:04
【问题描述】:
在下面的代码中,我尝试在二叉树中打印从根到叶子的所有路径。 如果我写一个递归函数如下:
void printPath(BinaryTreeNode * n, int path[],int pathlen)
{
//assume base case and initializations taken care of
path[pathlen++] = n->data;
printPath(root->left,path,pathlen);
printPath(root->right,path,pathlen);
}
(我特意删除了基本情况和边缘情况处理以提高可读性)
path 数组会发生什么?它只是在每次递归调用期间被修改的一个全局副本吗? pathlen 变量是否覆盖了一些 path 值,给人的感觉是每个堆栈帧都有自己的本地path 的副本,因为 pathlen 对于每个堆栈帧都是本地的?
【问题讨论】:
-
path 只是一个指针变量,所以无论复制什么,它们都必须引用相同的内存地址。
-
这是一个很长的问题:“它只是在每次递归调用期间被修改的一个全局副本,并且 pathlen 变量覆盖了一些路径值,给人的感觉是每个堆栈帧都有自己的本地路径的副本,因为 pathlen 对于每个堆栈帧都是本地的?”。您可能想尝试改写一下,因为在某些时候很难理解您在问什么......
-
@barakmanos 我尝试尽可能添加昏迷。这有帮助吗?
标签: c recursion tree tree-traversal