簡體   English   中英

排序數組到 C++ 中的 BST 實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM