l
二項ヒープ内のノードのリストの反転がわかりません:
Node* reverseList(Node* l) {
//return reverseNode(l);
if(l->sibling)
{
return reverseList(l->sibling);
l->sibling->sibling = l;
}
}
これは何を意味するのでしょうか?:
l->sibling->sibling = l;
親?
l
二項ヒープ内のノードのリストの反転がわかりません:
Node* reverseList(Node* l) {
//return reverseNode(l);
if(l->sibling)
{
return reverseList(l->sibling);
l->sibling->sibling = l;
}
}
これは何を意味するのでしょうか?:
l->sibling->sibling = l;
親?
問題のコードは正しくありません。これは正しいコードです
int RevertList(Node *h){
if (h->sibling != NULL){
RevertList(h->sibling);
(h->sibling)->sibling = h;
}
else
root = h;
}
RevertList
ノードが二項ヒープから削除されるときに使用されるヘルパー関数です。
ノードが削除されると、それは子であり、その兄弟は二項ヒープ構造から切り離されます。このRevertList
関数は切り離された子の順序を逆にするため、正しい順序でルート リストに結合できます。
このコードを見て、これがどのように機能するかをよりよく理解してください!
以下は、CLRS 教科書の例です。