Python实现按深度缩进打印自定义tree结构的问题求助
原代码问题分析
你的实现没有跑通,核心是三个逻辑错误:
- 没有区分树的标签和分支结构:直接遍历树对象t,第一个元素是节点标签,后续元素都是子树对象,直接打印子树就会把内部列表结构(比如
[2]、[3, [4], [5]])直接输出,不会拆成单个节点逐行打印 - 缩进逻辑错误:规则是每个节点缩进为
深度*2个空格,子节点只比父节点多2个空格,你代码里全局累加indent的写法不符合递归层级的缩进传递规则 - 缺少递归逻辑:树是典型的递归结构,每个分支本身也是独立的树,必须递归调用打印函数处理子树,不能直接打印分支对象
正确实现思路
按照题目要求,递归逻辑非常直接:
- 第一步打印当前节点:前面拼接
indent数量的空格,后面跟当前节点的标签 - 遍历当前节点的所有子分支
- 对每个子分支递归调用打印函数,子节点的深度比当前节点大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
相关产品推荐
相关产品推荐

