1

l二項ヒープ内のノードのリストの反転がわかりません:

Node* reverseList(Node* l) {
    //return reverseNode(l);
    if(l->sibling)
    {
        return reverseList(l->sibling);
        l->sibling->sibling = l;
    }
}

これは何を意味するのでしょうか?:

l->sibling->sibling = l;

親?

4

2 に答える 2

2

問題のコードは正しくありません。これは正しいコードです

int RevertList(Node *h){
    if (h->sibling != NULL){
        RevertList(h->sibling);
        (h->sibling)->sibling = h;
    }
    else
        root = h;
}

RevertListノードが二項ヒープから削除されるときに使用されるヘルパー関数です。

ノードが削除されると、それは子であり、その兄弟は二項ヒープ構造から切り離されます。このRevertList関数は切り離された子の順序を逆にするため、正しい順序でルート リストに結合できます。

このコードを見て、これがどのように機能するかをよりよく理解してください!

以下は、CLRS 教科書の例です。

ここに画像の説明を入力

于 2022-02-19T10:07:46.710 に答える