Python:如何将文本文件单词存入二叉树并实现逐行输出
解决方案
先梳理你代码里的核心问题,对应修改如下:
修正后的代码
from bintreeFile import Bintree english = Bintree() with open("english.txt", "r", encoding = "utf-8") as english_file: for rad in english_file: # 用split()自动分割任意空白字符,避免多空格产生空字符串 words = rad.strip().split() # 遍历每个单词,逐个存入二叉树 for word in words: # 修正变量名:定义的实例是english,不是engelska english.put(word) # 所有单词存入后统一打印,将write()移出循环 english.write()
关键修改说明
- 变量名统一:你定义的二叉树实例是
english,但后续错误使用了engelska,会导致运行报错(若实际代码变量名是engelska,请将定义处也改为engelska = Bintree())。 - 优化单词分割:
split(" ")仅按单个空格分割,遇到连续空格会生成空字符串;改用无参数的split(),可自动识别任意空白字符(空格、换行、制表符等)分割单词,更适配文本场景。 - 逐个存入单词:原代码直接把整行分割后的列表存入二叉树,导致打印时输出列表结构;需遍历每个单词,单独调用
put()方法存入,确保二叉树中存储的是单个单词而非列表。 - 调整打印时机:原代码每处理一行就调用
write(),会重复打印中间状态;应等所有单词存入完成后,再一次性调用write()输出全部内容。
适配Bintree.write()方法(若需要)
如果修改后仍未实现逐行打印,说明Bintree类的write方法逻辑不符合需求。此时需修改bintreeFile.py中的write方法,示例中序遍历实现如下:
class Bintree: # 其他已有方法省略... def write(self): def inorder_traversal(node): if node is not None: inorder_traversal(node.left) print(node.value) inorder_traversal(node.right) inorder_traversal(self.root)
内容的提问来源于stack exchange,提问作者David Gallego
相关产品推荐
相关产品推荐

