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

Python树层序遍历:队列存tuple时下标访问报错原因咨询

解决你的树层序遍历错误问题

嘿,这个错误其实是个很容易犯的小疏忽,和tuple的用法没关系,我来给你拆解清楚:

错误根源

你遇到的TypeError: 'int' object is not subscriptable,问题出在Queue.put()的传参上,而不是tuple的使用方式不对!

Python标准库的queue.Queue.put()方法,只接受一个必填参数——就是你要放进队列的元素。看你代码里的这两行:

q.put(level + 1, node.left)
q.put(level + 1, node.right)

你传了两个参数,第二个参数node.left会被当作put()方法的block参数(这个参数是控制队列满时是否阻塞的布尔值,默认是True)。所以实际上,你放进队列的不是(level+1, node.left)这个tuple,而是单独的level+1这个整数!

后面循环里e = q.get()拿到的是整数,自然没法用e[0]访问下标——整数类型不支持下标操作,这就触发了错误。

修正代码

你只需要把层级和节点明确打包成tuple再传入put(),给tuple加上括号就行(函数传参时不能省略括号,否则会被当成多个参数):

if node.left:
    q.put( (level + 1, node.left) )
if node.right:
    q.put( (level + 1, node.right) )

验证结果

修正后运行test1(),levelOrderTraversal(root)会返回预期的层序遍历结果:

defaultdict(list, {0: [1], 1: [2, 3]})

额外说明

你用tuple同时存储层级和节点的思路完全没问题,tuple的这种使用方式是正确的——这次只是函数传参时的小失误,和tuple本身无关哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:05