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

家族类获取最左叶子节点异常:代码始终输出最右节点

问题修复:获取家族树最左侧叶子节点

你的leftmost函数逻辑完全偏离目标,当前代码在循环中错误地比较子节点的子元素数量,最终递归处理的是循环最后一个子节点(最右侧的Catelyn),自然会返回她的最右侧叶子Rickon。

正确逻辑是:只要当前节点有子节点,就递归处理它的第一个子节点——最左侧的叶子就是沿着每个节点的第一个孩子一直往下遍历,直到遇到无子女的节点。

修复后的完整代码:

from typing import List

class Family:
    """Store information about the Family of a person."""
    name: str
    children: List['Family']
    def __init__(self, name: str, children: List['Family']):
        self.name = name
        self.children = children
    def __repr__(self):
        return "Family('{}', {})".format(self.name, self.children)


def leftmost(fam: Family) -> str:
    """Return the leftmost child in fam."""
    # 无子女时返回当前节点名称(叶子节点)
    if not fam.children:
        return fam.name
    # 有子女则递归处理第一个子节点,沿最左侧分支遍历
    return leftmost(fam.children[0])

tully = Family('Hoster',
                 [Family('Lysa',
                         [Family('Robin', [])]),
                  Family('Edmure', []),
                  Family('Catelyn',
                         [Family('Robb', []),
                          Family('Sansa', []),
                          Family('Arya', []),
                          Family('Bran', []),
                          Family('Rickon', [])])])
# 测试将返回预期的"Robin"
check.expect("L1", leftmost(tully), "Robin")

核心修复点:

  • 移除了错误的循环判断逻辑,直接通过fam.children[0]定位最左侧子节点
  • 递归逻辑聚焦于沿最左侧分支深度遍历,最终触达最左侧的叶子节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:10:17