Python:TypeError: 'TreeNode' 对象不可迭代

标签 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):
        """
        :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_treesright_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/

相关文章:

java - 使用通用 Comparable<T> 数据在 Java 中实现二叉树?

python - 现在获得 UTC 的非天真(感知)日期时间的最简单方法?

python - 解释Anaconda文件夹结构

algorithm - 我的算法不起作用

php - 以已知顺序对数组重新排序的最有效方法

algorithm - 非凸多边形内的最大圆

c++ - 二叉搜索树根正在工作,但它不能有任何 child ?

c - 不使用递归反序列化二叉树

python - Python 2 中 "//"和 "/"的区别

python - 如何在我的网站上将 WMD markdown 语法转换为 HTML?