0

構造体を含む .h ファイルがあり、このファイルを編集してはなりません。

struct KnightTree 
{
    int key;
    int level; 
    int balance;            //will be used in AVL only, and be ignored in other cases.
    KnightTree* pLeftChild;
    KnightTree* pRightChild;
};

ここにコードを記述する .cpp ファイルには、BST に 2 つの値 (キーとレベル) を挿入するコードを記述しました。

void BSTinsert(KnightTree* tree, int k, int lvl)
{
    KnightTree* newnode;
    if (tree == NULL)
    {
        newnode->key=k;
        newnode->level=lvl;
        newnode->pLeftChild=NULL;
        newnode->pRightChild=NULL;
        tree = newnode;
    }
    else
    {
        if (tree->key > k)
            BSTinsert(tree->pLeftChild,k,lvl);
        else if (tree->key <= k)
            BSTinsert(tree->pRightChild,k,lvl);
    }
}

しかし、実行すると、コンソールは約 3 秒間「思考」し、 「exe が動作を停止しました」というエラー ポップアップが表示されたので、プログラムを閉じる必要があります。簡単だと思いますが、今はちょっと混乱しています... Visual C++ 6.0を使用しています(この古いバージョンを使用する必要があります...)

君たちありがとう!

4

1 に答える 1

2

少なくとも2つの大きな問題があります。

  1. あなたはあなたnewnodeのためにメモリを割り当てないので、それに対処することによってあなたはただメモリの破損を引き起こします。
  2. 新しく作成したノードをツリーにアタッチしtree = newnodeません。割り当てると、ツリーへの必要なリンクが作成されません。

これらの2つの問題の修正から続行します。

そしてもう1つ、ここに質問を投稿する前に、実際にデバッグを試みましたか?

于 2012-11-19T08:23:32.640 に答える