C++ 我可以使用向量作为二叉树的底层数据存储吗

C++ 我可以使用向量作为二叉树的底层数据存储吗,c++,C++,我正在建立一个二叉树来搜索数据。我遇到的所有示例都使用阵列作为底层数据存储机制。但是,我的数据存储在一个向量中。我可以使用向量作为二叉树的底层数据存储机制吗?可以 如果希望计算速度更快,可以使用数组。但是,如果使用数组,则无法更改二叉树的大小(或深度或顺序等)。答案是,“可以-从性能角度来看,这样做是可取的”。boost库中已经为您轻松编写了一个实现 在C++中,有: 静态定义的数组-T[constant]-其维度必须是编译时常量 动态分配的数组a lanewt[variable],其中大小在

我正在建立一个二叉树来搜索数据。我遇到的所有示例都使用阵列作为底层数据存储机制。但是,我的数据存储在一个向量中。我可以使用向量作为二叉树的底层数据存储机制吗?

可以

如果希望计算速度更快,可以使用数组。但是,如果使用数组,则无法更改二叉树的大小(或深度或顺序等)。

答案是,“可以-从性能角度来看,这样做是可取的”。boost库中已经为您轻松编写了一个实现

在C++中,有:

  • 静态定义的数组-
    T[constant]
    -其维度必须是编译时常量

  • 动态分配的数组a la
    newt[variable]
    ,其中大小在运行时可能会有所不同

  • 包装编译时大小数组的标准库类
    std::array

  • 标准的库类
    std::vector
    ,它使用动态分配的内存,在插入数据时可以在运行时改变其大小,必要时将元素从旧的复制到新的更大的动态分配内存区域

后一种库产品通常比使用
T[constant]
newt[variable]
更可取,因为它们添加了面向对象的功能,如
.size()
的成员函数、迭代器和
向量的析构函数,后者执行元素的自动销毁和内存的删除

如果树的编译时常量上限为size,则可以使用
std::array
,但
std::vector
将允许动态调整大小,这是一种更灵活、更健壮的解决方案


更一般地说,你的问题可能会让C++程序员感到惊讶或困惑,因为我们的共同做法是存储有指针链接的节点的二进制树,而不是连续存储。在计算科学中,你所要求的仍然被认为是一棵二叉树(参见例),但我们大多数人通常使用标准库的
std::set
,这恰好使用了由指针链接的节点。

向量的底层数据结构是一个数组。这取决于你在做什么。如果它是静态的,就更容易了,尽管你也可以做一个动态的。动态数组的问题是,您必须跟踪索引,因为随着数组的变化,索引可能会随时间而变化。顺便说一句:在静态(排序)数组上进行二进制搜索不是一回事。也许这就是你想要的,可以改变。你可以用它做任何你喜欢的事情。数组大小是在编译时定义的。因此,您可以在前面定义大小。std::array是,std::vector can.resize(n)。@Robinson阅读OP问题说明他的数据存储在向量中,而不是数组中,这很好。