【发布时间】:2014-11-04 22:19:41
【问题描述】:
因此,对于我正在构建的应用程序,我需要能够在不使用递归、堆栈或在创建树后以任何方式修改树的情况下遍历二叉树。我的节点结构如下:
typedef struct
{
ValueType value; //Data stored in node
int left_index; //Left child
int right_index; //Right child
int parent_index; //Parent node
}
我将树存储为一维数组,其中每个节点的左子节点位于索引 2*i + 1,右子节点位于 2*i + 2,父节点位于 [i-1]/2 .如果一个节点没有父节点或子节点,它的关联索引为-1。
我发现的唯一一种基于迭代的非堆栈算法是一种叫做“Morris Traversal”的算法,如下所示:http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion-and-without-stack/
但是,Morris Traversal 在遍历期间修改了树,这是我无法做到的。
我愿意为每个节点添加任何需要的信息,只要我能在上述约束条件下编写算法即可。
我所要求的是否可能?如果是这样,我将如何去做?甚至不确定如何开始。
【问题讨论】:
标签: data-structures graph tree binary-search-tree traversal