原理**實現(c++)
左傾堆,也被稱為左偏樹、左偏堆、最左堆等。與二叉堆一樣,它也是優先佇列實現的方法。當涉及到對兩個優先佇列的合併時,左傾堆的效率比二叉堆的效率高很多。
template
<
class
t>
class
node
};
npl表示零距離長度:某結點到最近的不滿結點的路徑長度,不滿結點是指最多只有乙個孩子的結點。葉結點的npl=0,空結點的npl為-1。
//合併左傾堆x和左傾堆y
template
<
class
t>
node
* leftistheap
::merge
(node
*&x,node
*&y)
//設定合併後的新樹的npl
if(x-
>r)
x->npl=x-
>r-
>npl+1;
else
x->npl=0;
return x;
}template
<
class
t>
void leftistheap
::merge
(leftistheap
*other)
//新增
template
<
class
t>
node
* leftistheap
::insert
(node
*&heap,t key)
template
<
class
t>
void leftistheap
::insert
(t key)
刪除操作只在根結點出進行
//刪除根結點
template
<
class
t>
node
* leftistheap
::remove
(node
*&heap)
template
<
class
t>
void leftistheap
::remove()
#include
#include
using
namespace std;
template
<
class
t>
class
node};
template
<
class
t>
class
leftistheap
;//建構函式
template
<
class
t>
leftistheap
::leftistheap()
//析構函式
template
<
class
t>
leftistheap::~
leftistheap()
//前序遍歷
template
<
class
t>
void leftistheap
::preorder
(node
*tree)
}template
<
class
t>
void leftistheap
::preorder()
//中序遍歷
template
<
class
t>
void leftistheap
::inorder
(node
*tree)
}template
<
class
t>
void leftistheap
::inorder()
//後序遍歷
template
<
class
t>
void leftistheap
::postorder
(node
*tree)
}template
<
class
t>
void leftistheap
::postorder()
//交換兩個結點的內容
template
<
class
t>
void leftistheap
::swapnode
(node
*&x,node
*&y)
//合併左傾堆x和左傾堆y
template
<
class
t>
node
* leftistheap
::merge
(node
*&x,node
*&y)
//設定合併後的新樹的npl
if(x-
>r)
x->npl=x-
>r-
>npl+1;
else
x->npl=0;
return x;
}template
<
class
t>
void leftistheap
::merge
(leftistheap
*other)
//新增
template
<
class
t>
node
* leftistheap
::insert
(node
*&heap,t key)
template
<
class
t>
void leftistheap
::insert
(t key)
//刪除根結點
template
<
class
t>
node
* leftistheap
::remove
(node
*&heap)
template
<
class
t>
void leftistheap
::remove()
//銷毀左傾堆
template
<
class
t>
void leftistheap
::destroy
(node
*&tree)
}template
<
class
t>
void leftistheap
::destroy()
template
<
class
t>
void leftistheap
::print
(node
*tree,t key,
int child)
}template
<
class
t>
void leftistheap
::print()
左傾堆的C 實現
在下小白乙個 如有錯誤請指正 上 using system 資料結構 namespace datastructure public leftistnoderightnode public t key public int npl public leftistnode leftistnodeleftn...
紙上談兵 左傾堆 leftist heap
我們之前講解了堆 heap 的概念。堆是乙個優先佇列。每次從堆中取出的元素都是堆中優先順序最高的元素。在之前的文章中,我們基於完全二叉樹 complete binary tree 實現了堆,這樣的堆叫做二叉堆 binary heap binary heap有乙個基本要求 每個節點的優先順序大於兩個子...
堆的基本實現
今天講棧,棧的基本操作是入棧和出棧,棧的特點是先進後出。同時在進棧的時候注意棧是否是滿的,出棧的時候注意棧是否是空的。直接上 棧的類實現 使用類模板來實現 template class stack template void stack print int index template bool s...