从概念上讲,通过从给定的叶子节点(而不是根节点)开始并使用父指针到达根目录,可以在树中遍历它吗?
我问这个,因为我看到有人实现了一个树,他们使用一个数组来保存所有叶子节点/外部节点,每个叶子/外部节点只指向它们的父节点,那些父节点指向它们的父节点直到你到达没有父母的根节点。因此,它们的实现需要你从其中一个叶子开始到达树中的任何地方,你不能“下”树,因为她的树节点没有任何子指针,只有父指针。
我发现这个实现很有趣,因为我没有看到类似的东西,但我很好奇它是否仍然可以被视为“树”。我从来没有见过一棵树,你开始遍历叶子,而不是根。我也从未见过一棵树,其中树节点只有父指针而没有子指针。
答案 0 :(得分:3)
是的,这种结构存在。它通常被称为spaghetti stack。
Spaghetti堆栈可用于表示“是一部分”关系。例如,如果要以一种使向上转换有效的方式表示类层次结构,则可以将类层次结构表示为spaghetti堆栈,其中每种类型的节点存储指向其父类型的指针。这样,通过从节点向上走,很容易找到上传是否有效。
它们也常用于编译器中以跟踪范围界定信息。每个节点代表程序中的一个范围,每个节点都有一个指向节点的指针,该节点表示其上一级的范围。
希望这有帮助!
答案 1 :(得分:0)
如果给出了叶节点的数组A
,则可以进行遍历。如果只给出一个叶子节点,我不知道如何遍历树。伪代码:
// initial step
add all nodes in A to a queue Q
//removeNode(Q) returns pointer to node at front of Q
while((node = removeNode(Q)) != NULL)
/* do your operation on node */
add node->parent to Q