Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:TypeError:';TreeNode';对象是不可编辑的_Python_Algorithm_Binary Tree - Fatal编程技术网

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]]