因此,对于我正在构建的应用程序,我需要能够遍历二叉树而不使用递归,堆栈或在创建树后以任何方式修改树。我的节点结构如下:
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。
我发现的唯一迭代非堆栈算法是“莫里斯遍历”,如下所示:http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion-and-without-stack/
然而,Morris Traversal在遍历过程中修改了树,这是我无法做到的。
我愿意为每个节点添加所需的任何信息,只要我能根据上述约束编写算法。
我要求甚至可能吗?如果是这样,我将如何去做呢?不确定如何开始。
答案 0 :(得分:0)
“while(!do)”循环是否足够?
答案 1 :(得分:0)
你想要的是threaded binary tree。所有叶节点的右指针指向节点的有序后继。
创建这样的东西很容易,在插入或删除节点时更新它并不困难。如果你能控制节点结构,那么这几乎可以肯定你想要的。
答案 2 :(得分:-1)
ServiceWorker