打印所有根到叶子路径

时间:2015-07-02 12:06:26

标签: c++ tree stack binary-tree

我试图在二叉树中打印所有根到叶子路径的代码。

group by

代码给出了分段错误,因为终止条件存在一些问题。 有人可以帮助我解决问题。

1 个答案:

答案 0 :(得分:2)

这种做法过于复杂,而且很脆弱。

此处不需要单独的堆栈。

此处不需要单独的“可见”数组。

所需要的只是一个递归下降到这个树的股票递归访问者,它还为一个动态构建在堆栈上的结构提供了一个额外的参数,该结构使用链接列表构建到运行中的根路径。是这样的:

struct path_to_root {
   struct path_to_root *next;
   struct node *n;
};

现在,打印每个叶子音符的路径所需要的只是一个沼泽标准的访问者,它递归地迭代树和这个附加参数。以下是一般方法的粗略概念:

void printpath(struct node *n, struct path_to_root *p)
{
   struct path_to_root pnext;

   if (!n)
       return;

   if (!n->left && !n->right)
   {
       /* Your homework assignment here is to print the path that's in "p" */
   }

   pnext.n=n;
   pnext.next=p;

   printpath(n->left, &pnext);
   printpath(n->right, &pnext);
}

这将被调用为:

printpath(root, NULL);

如上所述,您的家庭作业将在指定的空白处使用p参数实现打印叶子路径的实际代码。此时,叶子的路径将在p参数中找到。

现在,这里有一个棘手的部分:p将是叶子的父亲,p->next将是其祖父母,等等。所以路径是从底部到顶部,而不是从上到下,但这是一个小细节,可以在打印代码中处理。

或者,或者,以相同的方式动态构建从上到下的叶子路径也不会太多额外的工作。