Một đống nhị phân là một cây nhị phân hoàn chỉnh có thể là Min Heap hoặc Max Heap. Trong một đống nhị phân tối đa, khóa ở gốc phải lớn nhất trong số tất cả các khóa có trong đống nhị phân. Thuộc tính này phải đúng đệ quy cho tất cả các nút trong Cây nhị phân. Min Binary Heap tương tự như MinHeap.
Thuật toán
Đối với max_heap:
Begin Declare function max_heap () Declare j, t of the integer datatype. Initialize t = a[m]. j = 2 * m; while (j <= n) do if (j < n && a[j+1] > a[j]) then j = j + 1 if (t > a[j]) then break else if (t <= a[j]) then a[j / 2] = a[j] j = 2 * j a[j/2] = t return End.
Đối với build_maxheap:
Begin Declare function build_maxheap(int *a,int n). Declare k of the integer datatype. for(k = n/2; k >= 1; k--) Call function max_heap(a,k,n) End.
Ví dụ
#include <iostream> using namespace std; void max_heap(int *a, int m, int n) { int j, t; t = a[m]; j = 2 * m; while (j <= n) { if (j < n && a[j+1] > a[j]) j = j + 1; if (t > a[j]) break; else if (t <= a[j]) { a[j / 2] = a[j]; j = 2 * j; } } a[j/2] = t; return; } void build_maxheap(int *a,int n) { int k; for(k = n/2; k >= 1; k--) { max_heap(a,k,n); } } int main() { int n, i; cout<<"enter no of elements of array\n"; cin>>n; int a[30]; for (i = 1; i <= n; i++) { cout<<"enter elements"<<" "<<(i)<<endl; cin>>a[i]; } build_maxheap(a,n); cout<<"Max Heap\n"; for (i = 1; i <= n; i++) { cout<<a[i]<<endl; } }
Đầu ra
enter no of elements of array 5 enter elements 1 7 enter elements 2 6 enter elements 3 2 enter elements 4 1 enter elements 5 4 Max Heap 7 6 2 1 4