【发布时间】:2020-07-19 03:48:21
【问题描述】:
我正在尝试编写一个对数组的整数元素进行排序的程序,使用二叉搜索树 (BST) 作为支持数据结构。 这个想法是,一旦给定数组,就可以使用 BST 对其元素进行排序;例如:
如果我的数组是:{120, 30, 115, 40, 50, 100, 70}
然后我像这样构建一个 BST:
一旦有了这个 BST,我就可以进行中序树遍历,从最低到最高元素按顺序触摸每个节点并修改数组。 结果将是一个排序数组 {30, 40, 50, 70, 100, 115, 120}
我写了这段代码,但我不明白我犯的错误在哪里。 它编译没有任何错误,但显然它有问题:
#include<iostream>
using namespace std;
struct Node
{
int label;
Node* left;
Node* right;
};
void insertSearchNode(Node* &tree, int x) //insert integer x into the BST
{
if(!tree){
tree = new Node;
tree->label = x;
tree->right = NULL;
tree->left = NULL;
return;
}
if(x < tree->label) insertSearchNode(tree->left, x);
if(x > tree->label) insertSearchNode(tree->right, x);
return;
}
void insertArrayTree(int arr[], int n, Node* &tree) //insert the array integer into the nodes label of BST
{
for(int i=0; i<n; i++){
insertSearchNode(tree, arr[i]);
}
return;
}
int insertIntoArray(int arr[], Node* &tree, int i) //insert into the array the node label touched during an inorder tree traversal
{
i=0;
if(!tree) return 0;
i += insertIntoArray(arr, tree->left, i) +1;
arr[i] = tree->label;
i += insertIntoArray(arr, tree->right, i) +1;
return i;
}
int main()
{
Node* maintree;
maintree = NULL;
int num;
cin>>num;
int arr[num];
for(int i=0; i<num; i++){ //initialize array with num-elements
cin>>arr[i];
}
insertArrayTree(arr, num, maintree); //insert elements into BST
int index;
insertIntoArray(arr, maintree, index); //modify array sorting his elements using the BST
for(int y=0; y<num; y++) cout<< arr[y] << ' ';
return 0;
}
我希望我的问题足够清楚。 任何帮助/建议将不胜感激!
谢谢:)
【问题讨论】:
-
我只是看了你的代码,但为什么
insertIntoArray立即将其i参数设置为0? -
@BradyDean 我试图弄清楚如何在数组的正确位置插入 BST 的元素,但现在我正在查看函数 insertIntoArray 似乎不起作用。如果它在 tree==NULL 时返回 -1 而不是 0 可能会起作用吗? (对不起我的英语,希望清楚)
-
我想让你的代码正常工作,我只是想弄清楚
insertIntoArray。你忘了检查x == tree->label是否也在insertSearchNode中。 -
不错的开始。当你让它工作时,你应该在codereview.stackexchange.com PS 上获得代码审查。他们只会审查工作代码,因此需要先修复它。
标签: c++ algorithm sorting binary-search-tree computer-science