家族类获取最左叶子节点异常:代码始终输出最右节点
问题修复:获取家族树最左侧叶子节点
你的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
相关产品推荐
相关产品推荐

