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
相关产品推荐
相关产品推荐

