4-8 Python数据结构常考题之堆

Posted WinvenChang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4-8 Python数据结构常考题之堆相关的知识,希望对你有一定的参考价值。

一、堆

堆的常考题基本围绕在合并多个有序(数组/链表);TopK问题
1.理解堆的概念,堆是完全二叉树,有最大堆和最小堆
2.全使用python内置的 heapq模块实现堆的操作
3.常考题:合并K个有序链表 leetcode merge-k-sorted-list

# leetcode 第23号题目: 合并K个升序链表
from heapq import heapify, heappop

class ListNode:
	def __init__(self, val=0, next=None):
		self.val = val
		self.next = next

class Solution:
	def mergKLists(self, lists):
		# 读取所有节点值
		h = []
		for node in lists:
			while node:
				h.append(node.val)
				node = node.next

		if not h:   # h 为空时,返回 None,不然会报错
			return None
		# 构造一个最小堆
		heapify(h)   # 转换成最小堆

		# 构造链表
		root = ListNode(heappop(h))
		cur_node = root
		while h:
			next_node = ListNode(heappop(h))
			cur_node.next = next_node
			cur_node = next_node
		return root

以上是关于4-8 Python数据结构常考题之堆的主要内容,如果未能解决你的问题,请参考以下文章

4-5 Python数据结构常考题之链表

4-6 Python数据结构常考题之二叉树

3-3 Python函数常考题

Python语言基础常考题

4-3 Python数据结构常考题

4-1 Python常用内置算法与数据结构常考题