我正在尝试将二叉树实现为2d数组。我希望用户输入所需的树高,程序应提供适当的大小数组。然后,我要打印数组,这就是为什么我需要将其作为参数传递的原因。但是,出现以下错误:



拜托,是什么导致了错误,我该如何解决?

#include <iostream>
#include <string>
#include <math.h>

using namespace std;
void printTree(string** tree);
int main()
{
    int treeHeight = 0;
    int maxNumberOfNodes = 1;
    cout << "enter tree height";
    cin >> treeHeight;
    cout << treeHeight<< "\n";

    //create an array that can hold every combination for a given tree height
    maxNumberOfNodes = pow(2,treeHeight) - 1;
    string** tree [3][maxNumberOfNodes];
    cout << maxNumberOfNodes;
    printTree(tree);

}

 void printTree(string** tree){
//not fully implemented yet
    for(int i=0; i < sizeof(tree);  i++){
        cout << "*" << " ";
    }
}

最佳答案

string** tree [3][maxNumberOfNodes];

是string **类型的静态2D数组的语法,其中两个维度都必须声明为const。

静态数组和动态数组之间的区别如下所示:Multidimensional variable size array in C++

相反,您想要写类似
string** tree = new string*[3];
for(int i = 0; i < 3; i++)
   tree[i] = new string[maxNumberOfNodes];

正如@Remy Lebeau所说:每次new[]都需要通过delete[]调用来回答,如下所示:
for (int i = 0; i < 3; i++)
    delete tree[i];
delete[] tree;

从堆中删除动态分配。

就像@drescherjm指出的那样,sizeof(tree)无效,因为tree只是一个指针,不包含有关数组的大小信息。

您可以通过另外传递数组的尺寸来解决此问题:
void printTree (string** tree, int dim, int dim2)

并将循环重写为
for(int i = 0; i < dim; i++){
  for(int j = 0; j < dim2; j++){
    cout << tree[i][j]; //...
  }
}

09-06 12:39
查看更多