Skip to content

Commit 9d99cae

Browse files
committed
update
1 parent 4e838b5 commit 9d99cae

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

树形数据结构/Heap.md

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,45 @@
1616

1717
把堆存储的最后那个节点移到填在根节点处,再从上而下调整父节点与它的子节点(**heapify-down**)
1818

19-
## 二项树
19+
## 左倾堆
20+
21+
左倾堆的每个节点有一个附加信息,即`null path length(npl)`: 从一个节点到一个最近的不满节点的路径长度(不满节点:两个子节点至少有一个为NULL)
22+
23+
左倾堆是一个符合下面要求的二叉树:
24+
25+
1. 每个节点的Key大于(或小于)子节点的Key
26+
2. 对于任意节点的左右两个子节点,右子节点的`npl`不大于左子节点的`npl`.
27+
28+
可以证明 如果一个左倾堆的右侧路径上有r个节点,那么该左倾堆将至少有2^r-1个节点,整个左倾堆至少有2^(r+1)-1个节点,因此如果沿着右侧路径合并,复杂度
29+
为log(n).
30+
31+
左倾堆合并算法:
32+
33+
1. 如果一个空左倾堆与一个非空左倾堆合并,返回非空左倾堆
34+
2. 如果两个左倾堆都非空,那么比较两个根节点的value.取较小的根节点为新的根节点,合并较小根节点堆的右子堆与较大根节点堆.
35+
3. 如果右子堆npl > 左子堆npl,互换右子堆与左子堆.
36+
4. 更新根节点的npl = 右子堆npl + 1
37+
38+
![LeftistTree](img/LeftistTree.png)
39+
40+
## 二项堆
41+
42+
二项堆是一系列二项树的集合,二项树定义如下:
43+
44+
### 二项树
2045

2146
二项树是递归的定义的:
2247

2348
1. 度为0的二项树只包含一个节点
24-
2. 度为k的二项树有一个根节点,根节点有k个子女,每个子女分别是度数为k-1,k-2,……,2,1的二项树的根
49+
2. 度为k的二项树有一个根节点,根节点有k个子女,每个子女分别是度数为k-1,k-2,……,2,1,0的二项树的根
2550

26-
## 二项堆
51+
二项树实现结构如下:
52+
53+
* 每个节点持有一个父节点指针
54+
* 每个节点只有一个孩子指针,指向第一个孩子
55+
* 每个节点有一个邻居指针,指向下一个邻居,通过孩子指针和孩子指针的邻居指针可以遍历所有的孩子.
56+
57+
![BinomialTree](img/BinomialTree.jpg)
2758

2859
二项堆是指满足以下性质的二项树的集合:
2960

@@ -56,27 +87,6 @@
5687

5788
将需要删除的结点的关键字的值减小到负无穷大(比二项堆中的其他所有关键字的值都小即可),执行“减小关键字的值”算法,使其调整到当前二项树的根节点位置,再删除最小关键字的根结点即可
5889

59-
## 左倾堆
60-
61-
左倾堆的每个节点有一个附加信息,即`null path length(npl)`: 从一个节点到一个最近的不满节点的路径长度(不满节点:两个子节点至少有一个为NULL)
62-
63-
左倾堆是一个符合下面要求的二叉树:
64-
65-
1. 每个节点的Key大于(或小于)子节点的Key
66-
2. 对于任意节点的左右两个子节点,右子节点的`npl`不大于左子节点的`npl`.
67-
68-
可以证明 如果一个左倾堆的右侧路径上有r个节点,那么该左倾堆将至少有2^r-1个节点,整个左倾堆至少有2^(r+1)-1个节点,因此如果沿着右侧路径合并,复杂度
69-
为log(n).
70-
71-
左倾堆合并算法:
72-
73-
1. 如果一个空左倾堆与一个非空左倾堆合并,返回非空左倾堆
74-
2. 如果两个左倾堆都非空,那么比较两个根节点的value.取较小的根节点为新的根节点,合并较小根节点堆的右子堆与较大根节点堆.
75-
3. 如果右子堆npl > 左子堆npl,互换右子堆与左子堆.
76-
4. 更新根节点的npl = 右子堆npl + 1
77-
78-
![LeftistTree](img/LeftistTree.png)
79-
8090
## 斐波那契堆(Fibonacci Heap)
8191

8292
斐波那契堆是一系列无序树的集合,每棵树是一个最小堆,满足最小堆的性质.堆保存了堆中所有节点的数目,保存了最小关键字的节点.
-27.7 KB
Loading

0 commit comments

Comments
 (0)