这是我的代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def generateTrees(self, n):
"""
:type n: int
:rtype: List[TreeNode]
"""
if n==0:
return []
return self.generateTreesHelper(range(1, n+1))
def generateTreesHelper(self, lst):
if len(lst) == 0:
return [None]
elif len(lst) == 1:
return TreeNode(lst[0])
else:
res = []
for i in range(0, len(lst)):
left_trees = self.generateTreesHelper(lst[:i])
right_trees = self.generateTreesHelper(lst[i+1:])
for left in left_trees:
for right in right_trees:
root = TreeNode(lst[i])
root.left = left
root.right = right
res.append(root)
return res
代码用于生成存储值 1...n 的所有结构唯一的 BST(二叉搜索树)。
例如,
给定 n = 3,程序应返回如下所示的所有 5 个不同的 BST。
[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]].
但是,我不断收到错误消息。
TypeError: 'int' object is not iterable.
最佳答案
我不知道你是怎么得到那个的
TypeError: 'int' object is not iterable.
错误。在 Python 2.6 和 3.6 上,我都收到问题标题中提到的错误:
TypeError: 'TreeNode' object is not iterable
这是因为 return TreeNode(lst[0])
返回一个 TreeNode。它应该返回一个包含该 TreeNode 的 list,以便它可以在您的 left_trees
和 right_trees
for
中迭代循环。
这是您的代码的修复版本,使用简单的 __repr__
方法,以便我们可以看到输出是正确的。
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def __repr__(self):
if self.left is None and self.right is None:
s = '{}'.format(self.val)
else:
s = '[val:{}, left:{}, right:{}]'.format(self.val, self.left, self.right)
return s
class Solution(object):
def generateTrees(self, n):
"""
:type n: int
:rtype: List[TreeNode]
"""
if n==0:
return []
return self.generateTreesHelper(range(1, n+1))
def generateTreesHelper(self, lst):
if len(lst) == 0:
return [None]
elif len(lst) == 1:
return [TreeNode(lst[0])]
else:
res = []
for i in range(0, len(lst)):
left_trees = self.generateTreesHelper(lst[:i])
right_trees = self.generateTreesHelper(lst[i+1:])
for left in left_trees:
for right in right_trees:
root = TreeNode(lst[i])
root.left = left
root.right = right
res.append(root)
return res
print(Solution().generateTrees(3))
输出
[[val:1, left:None, right:[val:2, left:None, right:3]], [val:1, left:None, right:[val:3, left:2, right:None]], [val:2, left:1, right:3], [val:3, left:[val:1, left:None, right:2], right:None], [val:3, left:[val:2, left:1, right:None], right:None]]
关于Python:TypeError: 'TreeNode' 对象不可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789552/