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

使用Python生成器获取二叉树叶节点值并转为列表的问题

代码问题说明

你代码存在三处核心错误:

  • 递归调用生成器没有加yield from:生成器函数调用后返回的是生成器对象,不会自动执行内部迭代,必须用yield from才能把子生成器的元素传递到上层
  • 空节点逻辑多余:if not root: yield会产出无意义的None值,直接删除这段即可,空节点不需要产出任何内容
  • 生成器遍历逻辑错误:for i in a已经在逐个取出生成器的元素,内部再调用next(a)会跳过一半元素;且最后你返回的是生成器对象而非组装好的列表,自然得不到预期结果

修正后代码

def leaves_list(self):
    def find(root):
        # 空节点直接结束,不产出任何值
        if not root:
            return
        # 匹配叶子节点,产出节点值
        if not root.left and not root.right:
            yield root.data
        # 递归遍历左子树,用yield from接收子生成器的产出
        if root.left:
            yield from find(root.left)
        # 递归遍历右子树
        if root.right:
            yield from find(root.right)
    # 直接把生成器转为列表返回,无需手动循环追加元素
    return list(find(self.root))

运行你提供的测试代码,输出结果为预期的[5, 1, 8, 4]。如果你需要返回生成器而非列表,仅需把最后一行改为return find(self.root),调用方再自行转列表即可。

内容的提问来源于stack exchange,提问作者xander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:03