首页 > 解决方案 > 优先队列未在树中正确添加数据

问题描述

我正在尝试在 python 中实现霍夫曼编码算法,但是当我尝试在树中添加节点数据时,我没有得到正确的输出值?

这是我到目前为止添加节点的代码:

 n = 6
 charArray = ['a','b','c','d','e','f']  
 charFreq = [45,13,12,16,9,5]
 Heap = []

 for i in range(0, n):
     lol = HuffmanNode()
     lol.setDataC(charFreq[i], charArray[i])

     lol.left = None
     lol.right = None
     heapq.heappush(Heap, lol)

 root = HuffmanNode()
 root = None

 while (len(Heap) > 1):
     x = HuffmanNode()
     x = heappeak(Heap)
     heapq.heappop(Heap)
     print("X data")
     print(x.data)

     y = HuffmanNode()
     y = heappeak(Heap)
     heapq.heappop(Heap)
     print("Y data")
     print(y.data)

     f =  HuffmanNode()
     f.data = x.data + y.data
     print("f data")
     print(f.data)
     f.c = '-'

     f.left = x
     f.right = y
     root = f

     heapq.heappush(Heap, f)

我得到输出:

X data
5
Y data
9
f data
14
X data
14
Y data
16
f data
30
X data
30
Y data
12
f data
42
X data
42
Y data
13
f data
55
X data
55
Y data
45
f data
100
f:00000
e:00001
d:0001
c:001
b:01
a:1

什么时候应该:

X data
5
Y data
9
f data
14
X data
12
Y data
13
f data
25
X data
14
Y data
16
f data
30
X data
25
Y data
30
f data
55
X data
45
Y data
55
f data
100
a:0
c:100
b:101
f:1100
e:1101
d:111

出于某种原因,它在堆中再次读取 14 并且不知道为什么?任何帮助都会很棒

标签: pythonalgorithmtreehuffman-code

解决方案


推荐阅读