构建不完整的二叉树

时间:2015-09-09 05:47:19

标签: c++ data-structures binary-tree

我试图根据文本文件中提供的数据构建不完整的二叉树

2
3 8
2 10 0 12
1 8 0 0 4 0

会形成这样的树:

Example tree

我大致知道我需要做什么,我想:

  • 逐行从文件中读入。
  • 将数组传递给构建函数。
  • 在构建树时,树数据类型将跟踪它在指针数组中添加的最后节点(例如,如果我们刚刚完成添加文本文件的第3行,则为之前的节点数组看起来像指向包含[2 10 12]
  • 的节点的指针
  • 当我们开始添加第4行时,我们创建一个3 * 2 = 6长度的数组来存储指向节点的指针。
  • 我们遍历上一次运行的指针数组(包含[2 10 12]),并为通过的任何非零键创建左右子节点。我们将指针放在我们6个长阵列中的那些节点上。
  • 当我们得到一个空白行时,我们已经完成了。

我遇到的问题是,我不确定如何在每次调用构建函数时将指针数组存储到更改大小的节点,并且是类变量(对于Tree类)。我是以正确的方式来做这件事的吗?有没有更简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

为什么不使用std :: vector而不是数组?它的行为与数组完全相同,但可以调整大小。

使用示例:

using namespace std;
Node *a = new Node;
vector<Node*> vec;
vec.push_back(a);

答案 1 :(得分:1)

与2D数组array[row][column]一样,您可以使用2D vector即。 vector< vector<int> > V是向量的向量。

vector< vector<int> > V中,向量内部表示行,外部向量表示列(for your understanding I just tell)

这里2D矢量可以调整大小。没有必要每列大小相等。您可以处理push, pop,并可以根据内存大小存储数据。

示例:

您可以像这样调整大小:

int num_of_col = 5;
int num_of_row = 9;
double init_value = 3.14;

vector< vector<double> > matrix;
//now we have an empty 2D-matrix of size (0,0). Resizing it with one single command:
matrix.resize( num_of col , vector<double>( num_of_row , init_value ) );
// and we are good to go ... 

您可以在这里了解vector