遍历二叉树 - 没有递归,没有堆栈,没有树修改

时间:2014-11-04 22:19:41

标签: data-structures graph tree binary-search-tree traversal

因此,对于我正在构建的应用程序,我需要能够遍历二叉树而不使用递归,堆栈或在创建树后以任何方式修改树。我的节点结构如下:

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在遍历过程中修改了树,这是我无法做到的。

我愿意为每个节点添加所需的任何信息,只要我能根据上述约束编写算法。

我要求甚至可能吗?如果是这样,我将如何去做呢?不确定如何开始。

3 个答案:

答案 0 :(得分:0)

“while(!do)”循环是否足够?

答案 1 :(得分:0)

你想要的是threaded binary tree。所有叶节点的右指针指向节点的有序后继。

创建这样的东西很容易,在插入或删除节点时更新它并不困难。如果你能控制节点结构,那么这几乎可以肯定你想要的。

答案 2 :(得分:-1)

ServiceWorker