引言二叉堆是一种特殊的树形数据结构,它是一种完全二叉树,且满足堆序性质。在Python中,我们可以通过多种方式创建空二叉堆,并对其进行操作。本文将详细介绍如何在Python中创建空二叉堆,并从入门到实...
二叉堆是一种特殊的树形数据结构,它是一种完全二叉树,且满足堆序性质。在Python中,我们可以通过多种方式创建空二叉堆,并对其进行操作。本文将详细介绍如何在Python中创建空二叉堆,并从入门到实战进行讲解。
堆序性质是二叉堆的核心特点,它包括以下两种形式:
完全二叉树是一种特殊的二叉树,它满足以下条件:
在Python中,我们可以使用以下几种方法创建空二叉堆:
class MinHeap: def __init__(self): self.heap = [0] # 使用列表实现,表首下标为0的项无用 def insert(self, key): self.heap.append(key) self.perc_up(len(self.heap) - 1) def del_min(self): if len(self.heap) == 1: return None min_value = self.heap[1] self.heap[1] = self.heap[-1] self.heap.pop() self.perc_down(1) return min_value def perc_up(self, i): while i // 2 > 0: if self.heap[i] < self.heap[i // 2]: self.heap[i // 2], self.heap[i] = self.heap[i], self.heap[i // 2] i = i // 2 else: break def perc_down(self, i): while 2 * i < len(self.heap): min_child = 2 * i if 2 * i + 1 < len(self.heap) and self.heap[2 * i + 1] < self.heap[min_child]: min_child = 2 * i + 1 if self.heap[i] > self.heap[min_child]: self.heap[i], self.heap[min_child] = self.heap[min_child], self.heap[i] i = min_child else: break def is_empty(self): return len(self.heap) == 1 def size(self): return len(self.heap) - 1Python标准库中的heapq模块提供了一个最小堆的实现,可以使用以下方法创建空二叉堆:
import heapq
heap = []
heapq.heapify(heap) # 将列表转换为最小堆以下是一个使用最小堆实现的冒泡排序的示例:
def bubble_sort(arr): heap = [] for item in arr: heapq.heappush(heap, item) sorted_arr = [] while heap: sorted_arr.append(heapq.heappop(heap)) return sorted_arr
arr = [5, 3, 8, 6, 2]
sorted_arr = bubble_sort(arr)
print(sorted_arr) # 输出:[2, 3, 5, 6, 8]本文介绍了Python中创建空二叉堆的方法,包括使用列表实现和使用heapq模块。通过实战案例,我们了解了二叉堆在实际应用中的价值。希望本文对您有所帮助。