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

Python实现按深度缩进打印自定义tree结构的问题求助

原代码问题分析

你的实现没有跑通,核心是三个逻辑错误:

  • 没有区分树的标签和分支结构:直接遍历树对象t,第一个元素是节点标签,后续元素都是子树对象,直接打印子树就会把内部列表结构(比如[2]、[3, [4], [5]])直接输出,不会拆成单个节点逐行打印
  • 缩进逻辑错误:规则是每个节点缩进为深度*2个空格,子节点只比父节点多2个空格,你代码里全局累加indent的写法不符合递归层级的缩进传递规则
  • 缺少递归逻辑:树是典型的递归结构,每个分支本身也是独立的树,必须递归调用打印函数处理子树,不能直接打印分支对象
正确实现思路

按照题目要求,递归逻辑非常直接:

  1. 第一步打印当前节点:前面拼接indent数量的空格,后面跟当前节点的标签
  2. 遍历当前节点的所有子分支
  3. 对每个子分支递归调用打印函数,子节点的深度比当前节点大1,所以传入的缩进值为indent + 2

注:这类作业题预定义的tree函数,一般配套两个辅助方法:label(t)获取节点的标签值,branches(t)获取当前节点的所有子树列表,是课程预设的标准接口。

可直接运行的正确代码
def print_tree(t, indent=0):
    # 打印当前节点,前缀为对应深度的缩进空格
    print('  ' * indent + str(label(t)))
    # 递归处理每个子树,子节点缩进增加2个空格
    for branch in branches(t):
        print_tree(branch, indent + 2)
效果验证

拿题目给出的测试用例运行:

  • 输入print_tree(tree(1)):根节点indent为0,直接输出1,符合预期
  • 输入print_tree(tree(1, [tree(2)])):根节点输出1,子节点2的indent为2,输出 2,符合预期
  • 输入题目中的numbers树,输出结果和题目要求完全一致:
1
  2
  3
    4
    5
  6
    7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:16:02