You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:05:30