我试图将一堆整数读入一个数组,然后使用一个函数将该数组作为元素的输入元素并创建一个二叉搜索树。 bst采用数组形式,在(2n + 1)阵列点处具有较小的元素,在2n + 2阵列点处具有较大的元素。我想我的大部分都在工作,但出于某种原因,我的功能中的循环不起作用。有解决方案??我想我只是没有看到什么。
代码::
#include <iostream>
#include <fstream>
using namespace std;
void sortArray(int arr[], int size)
{
int bst[50];
bst[0] = arr[0];
for(int b = 1; b < size - 1; b++)
{
int c = 0;
do{
if(arr[b] < bst[c])
{
c = ((2 * c) + 1);
}
if(arr[b] > bst[c])
{
c = ((2 * c) + 2);
}
}while(bst[c] != 0);
bst[c] = arr[b];
}
for(int p = 0; p < 25; p++){
cout << bst[p];
}
}
int main(int argc, char** argv) {
int myArray[50];
int i = 0;
ifstream myfile ("tree_nodes.txt");
if (myfile.is_open())
{
while (! myfile.eof() )
{
myfile >> myArray[i];
i++;
}
myfile.close();
}
else cout << "Unable to open file";
for(int p = 0; p < (i); p++){
cout << myArray[p];
}
sortArray(myArray,i);
return 0;
}
答案 0 :(得分:1)
您的代码存在很多问题。
int bst[50]
未初始化。内容未知,不为零。 int bst[50] = {};
,请参阅,例如http://www.cplusplus.com/doc/tutorial/arrays/ for
- 陈述的印象是输出排序的整数。情况也并非如此。 简而言之:这种方法不起作用。创建BST很棘手。我建议你研究一下已经存在的平衡 BST实现。
要解决5.你可以使用类似的东西:
void visitAndPrintOddBST(int bst[], int index = 0){
if (bst[index] == 0 ) return;
visitAndPrintOddBST(bst, index*2 + 1);
std::cout << bst[index] << std::endl;
visitAndPrintOddBST(bst, index*2 + 2);
}
您需要某种堆栈来跟踪树中的移动。在这种方法中,这是递归调用堆栈。此外,数组的大小未指定,很可能超出范围。这不是好代码。 仅用于此实验。