Python:TypeError:';TreeNode';对象是不可编辑的
这是我的密码:Python:TypeError:';TreeNode';对象是不可编辑的,python,algorithm,binary-tree,Python,Algorithm,Binary Tree,这是我的密码: # 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): "&
# 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”对象不可编辑
我不知道你怎么知道的
错误。在Python2.6和3.6上,我都遇到了问题标题中提到的错误:
TypeError: 'TreeNode' object is not iterable
这是因为返回树节点(lst[0])
返回树节点。它应该返回一个包含该树节点的列表,这样就可以在左树
和右树
中对循环进行迭代
下面是代码的修复版本,使用了一个简单的\uuuu repr\uuu
方法,这样我们就可以看到输出是正确的
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]]
[[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]]