c++ - 我的二叉树类节点的问题

标签 c++ class pointers tree

我正在尝试为二叉树表示编写一个类。每个节点都有一个值 (key)、一个 index 和一个 Node* 指针用于父节点 (p) ,左子(left)和右子(right)。 问题出在指针上。给出我的示例问题比解释更容易。

我编写了一个 print() 函数来打印树中的每个节点。 Here是类头文件。和 here是主要的测试文件。

问题是,当我调用 T.print() 时,它只打印 10、5 和 7。

最佳答案

问题是您使用的是 vector ,它根据需要在内部(重新)分配存储。

因此,当推回一个 vector 时,很可能整个内部数据都被复制到其他内存位置 - 使所有仍然指向旧位置的指针都无效。

一个简单的“修复”是 reserve一定量的 vector 空间,因此您至少可以在其中存储一定量的节点而无需重新分配。

例如,通过在 RootedTree 构造函数的开头添加它:

T.reserve(64);

请注意,这不是一个稳健的解决方案(如果您尝试在 vector 中放置超过 64 个节点,您仍然可能会遇到同样的问题)- 但它会证实上述分析。

关于c++ - 我的二叉树类节点的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545352/

相关文章:

javascript - JavaScript 中如何检查一个对象是否是常规对象

c - 确定循环双向链表的头是否是 "jump"循环的一部分

c++ - 公共(public)父类型 ifstream 和 ofstream

c++ - 如何在父 RECT 中有效地执行图像剪辑?

Java 开发人员在 Mac OS 上遇到 Objective-C

c++ - 在 char* 指针中复制 std::string 的一部分

c - 从按位操作的数组接收错误值,包括 C 代码

c++ - tr1::randgen() 上的竞争条件,即使使用 #pragma omp critical

Javascript removeEventListener 不在类中工作

javascript - 如何从类实例获取 JavaScript 类构造函数参数