再会。有一个二叉搜索树。平衡是必要的,但是从一棵树做一个对象数组是不可能的。从理论上讲,它应该是这样的,但由于某种原因并不是所有的元素都进入数组。
void GetMassive(int &n, tree_node * root, DataM *M)
{
if (root!=NULL)
{
GetMassive(n,root->left,M);
M[n++] = root->info;
GetMassive(n,root->right,M);
}
}
您的代码中有两个问题。
while (root!=NULL). 如果代码进入这个循环,那么它不会退出它,因为变量的值root在循环内不会改变。需要更换while为if.int n。考虑第一个函数调用,n == 0。接下来是线GetMassive(n,root->left,M);。如果左子树不为空,则数组的前几个元素M将被填充。但是在第一个函数调用中,n == 0. 因此,该元素M[0]将被覆盖。要么n将其设为全局变量,要么将其替换int n为int &n.可能的解决方案: