【发布时间】:2021-04-04 11:53:23
【问题描述】:
我碰巧遇到了二叉树数据结构的扁平数组表示,其中树上的所有值都存储在与索引树对应的数组中。
我想知道如何在没有叶节点的数组索引处存储空值。我假设引用是在 Java 中的。在 C++ 中,我们如何获得一个不等于 0 的空值。我们应该使用指针数组来代替吗?一种允许指针指向节点值(如果存在)或假定为nullptr(当节点值为空时)的一种。
我不打算使用 C++ 中的 NULL 值,因为它等于 0 整数,这在整数数组的情况下会导致冲突。
如果您需要澄清,请告诉我。
【问题讨论】:
-
你可以通过要求最后一层从左到右填充来规避这个问题,在这种情况下你只需要知道数组的填充前缀有多长(=树的大小)。
-
您可以存储指向动态分配对象的指针。如果你想避免动态分配,你可以存储
std::optional<T>,它在内部保存T。 -
Norrius 所指的属性意味着它通常被称为“二叉堆”,并且确保存储节点以保证这种约束的过程有时被称为“堆”数组。见:en.wikipedia.org/wiki/Binary_heap
-
评论:为什么这个 Q 被否决了?我觉得没那么糟糕。尽管尝试过的代码示例可能会有所帮助。
-
如果您的数组包含
int的元素,则没有其他方法可以假设某个int值无效(并分别处理它)。如果0不是一个合理的候选者,您可以使用-1或其他任何您认为不是节点有效值的东西。如果所有int值都可能有效,那么您必须存储与您的值配对的其他内容,例如bool。这类似于@Evg 已经建议的std::optional<T>。
标签: c++ arrays null binary-tree