som*_*ody 0 python file-io tree-traversal python-3.x
from arrayheap import ArrayHeap
def generateTable(self, node, table):
def codeTable(node, codeString):
if node.isLeaf:
table[node._char] = codeString
return
if node.getleft() is not None:
table(node.getLeft(), codeString + '0')
if node.getRight() is not None:
table(node.getRight(), codeString + '1')
codeTable(node, '')
return(table)
def main():
with open('codetable.txt', 'w') as cdt:
codeTable = {}
codeTable = HTree.generateTable(HTree, codeTable)
for i in sorted(codeTable):
cdt.write(str(i) + '\t' + str(codeTable[i]) + '\n')
main()
Run Code Online (Sandbox Code Playgroud)
我试图输出到文件的二进制遍历树中的每个单独节点.我已将预订和后序遍历方法留在文件中以供参考.我的问题是我的generateTable()方法出了什么问题(大部分代码都是提供给我的)我想输出它,以便它以格式列出遍历,0左边1是正确的<ascii value> : <binary path>.问题是,当我运行此代码时,我的输出文件codetable.txt为空.我究竟做错了什么?
generateTable()返回table不变; 你传入一个空字典,该函数除了返回同一个对象外什么都不做.
codeTable()不使用嵌套函数; 什么都没有实际称它.即使你不缩进的codeTable(node, '')电话是外面的嵌套函数,该函数有几个缺陷:
codeTable()只接受一个参数,但codeTable(node, '')调用传入两个参数.node.isLeaf但不称之为.table既是一本字典和调用.我怀疑你是打算以递归方式称呼它; 或许类似下面的事情?
def generateTable(self, node, table):
def codeTable(node, codeString):
if node.isLeaf():
table[node._char] = codeString
return
if node.getleft() is not None:
codeTable(node.getLeft(), codeString + '0')
if node.getRight() is not None:
codeTable(node.getRight(), codeString + '1')
codeTable(node, '')
return(table)
Run Code Online (Sandbox Code Playgroud)
现在,这将生成一个映射,其中包含叶节点的路径,由叶子节点的值键入; 路径由表示树上左右节点的字符0和1字符组成.
生成表后,可以将对文件的写入简化为:
for i in sorted(codeTable):
cdt.write(str(i) + '\t' + str(codeTable[i]) + '\n')
Run Code Online (Sandbox Code Playgroud)