[英]Sorted Array to BST implementation in C++
我有以下代碼,它接受一個排序的整數數組並將其轉換為平衡二叉樹:
class node
{
friend class bst;
public:
node():data(0), left(NULL), right(NULL){}
node(int val): data(val), left(NULL), right(NULL){}
private:
int data;
node* left;
node* right;
};
class bst{
public:
bst():root(NULL){}
bst(node* root):root(root){}
node* sorted_array_to_bst(int arr[], int start, int end)
{
if(start > end) return NULL;
int mid = (start + end)/2;
root = new node(arr[mid]);
root->left = sorted_array_to_bst(arr, start, mid-1);
root->right = sorted_array_to_bst(arr, mid+1, end);
return root;
}
void levelorder(node* root)
{
if(root == NULL) return;
std::queue<node*> Q;
Q.push(root);
while(!Q.empty())
{
node* current = Q.front();
std::cout<<current->data<<" ";
if(current->left) Q.push(current->left);
if(current->right) Q.push(current->right);
Q.pop();
}
}
private:
node* root;
};
int main()
{
int arr[10] = {2,6,7,9,13,15,18,21, 23, 29};
bst* b;
node* r = b->sorted_array_to_bst(arr, 0, 9);
b->levelorder(r);
return 0;
}
問題是,當我運行程序時,會無限打印 29。 我認為我的主要功能有問題。 任何幫助,將不勝感激。
你沒有初始化你的bst
實例b
。 您剛剛在沒有初始化的情況下創建了它,因此當您調用時:
node* r = b->sorted_array_to_bst(arr, 0, 9);
你的代碼會崩潰。 你應該是這樣的:
bst* b = new b( /* pass a node */ );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.