1

非再帰的な方法で要素を挿入するバイナリ ツリー コードを作成しました。コードが意図したとおりに機能していません。コードを何度デバッグしても、何も問題はないように見えますが、間違った結果が得られます。皆さんが助けてくれることを願っています。前もって感謝します。

void insert(int element){
    if(root == NULL){
        struct elemq *node;
        node = (struct elemq *)malloc(sizeof(struct elemq));
        node->ele = element;
        node->left = NULL;
        node->right = NULL;
        root = node;
        cout << root->ele << "\n";
    }
    else{
        struct elemq *ref;
        ref = root;
        while(ref != NULL){
            if(element <= ref->ele){
                if(ref->left == NULL){
                    struct elemq *node;
                    node = (struct elemq *)malloc(sizeof(struct elemq ));
                    node->ele = element;
                    node->left = NULL;
                    node->right = NULL;
                    ref->left = node;
                    break;
                }
                else{
                    ref = ref->left;
                }
            }
            else if(element > ref->ele){
                if(ref->right == NULL){
                    struct elemq *node;
                    node = (struct elemq *)malloc(sizeof(struct elemq ));
                    node->ele = element;
                    node->left = NULL;
                    node->right = NULL;
                    ref->right = node;
                    break;
                }
                else{
                    ref = ref->right;
                }
            }
        }
    }
}

要素を挿入しようとするたびにroot、最初だけでなく、各要素が として扱われます。ですから、毎回、条件if(root == NULL)true. rootグローバル変数として宣言しNULL、 in に初期化しましたmain()cout <<私は最初のif()条件を入れてこれを知るようになりました。以前の投稿をこの新しい質問に変更しました。

4

2 に答える 2

2
node = ref->left;

あなたがしたい

ref->left = node;

ref->right についても同様

于 2012-10-28T04:00:03.453 に答える
1

追加しているノードに左右の参照を設定するのではなく、参照に追加しているノードを誤って設定していると思います。に変更node = ref->leftref->left = node、右も同様。

于 2012-10-28T04:00:19.963 に答える