Python 以手动方式搜索树时出错

Python 以手动方式搜索树时出错,python,data-structures,typeerror,Python,Data Structures,Typeerror,我需要通过检查节点的分支之和是否大于零来搜索树。然而,我在sum中遇到了一个问题-我在 线路。我认为这是因为最终我会得到一个节点 current = [[1,'b']] (例如),因此我添加了if/else语句。也就是说,我想我是在试图总结一些类似的东西: first = [1] 然而,这个问题仍然存在。我不确定是什么原因造成的 作为参考,current是一个列表列表,第一个插槽是节点数据,第二个插槽是节点id(在内部列表中)。函数的作用是:根据子节点的id对节点上的数据进行分组(左侧子节点

我需要通过检查节点的分支之和是否大于零来搜索树。然而,我在sum中遇到了一个问题-我在

线路。我认为这是因为最终我会得到一个节点

current = [[1,'b']]
(例如),因此我添加了if/else语句。也就是说,我想我是在试图总结一些类似的东西:

first = [1]
然而,这个问题仍然存在。我不确定是什么原因造成的

作为参考,current是一个列表列表,第一个插槽是节点数据,第二个插槽是节点id(在内部列表中)。函数的作用是:根据子节点的id对节点上的数据进行分组(左侧子节点的id以1开头,右侧子节点的id以0开头)

我正在搜索的树存储为列表列表,如:

tree = [[0, '1'], [1,'01'], [0,'001']]
i、 这是一套哈夫曼密码

from collections import deque 

def group(items):
    right = [[item[0],item[1][1:]] for item in items if item[1].startswith('1')]
    left  = [[item[0],item[1][1:]] for item in items if item[1].startswith('0')]

    return left, right

def search(node):
    loops = 0
    to_crawl = deque(group(node))
    while to_crawl:
        current = to_crawl.popleft() # this is the left branch of the tree
        branch_sum = 0
        if len(current)==1:
            branch_sum = sum([t for t in current])
        else: 
            branch_sum = sum([t[0] for t in current])
        if branch_sum !=0 :
            l,r = group(current)
            to_crawl.extendleft(r)
            to_crawl.extendleft(l)
        loops += 1
    return loops
以下是我想做的:


给定一棵树,当大量数据为0时,找到1。为此,将树拆分为两个分支(通过group()函数)并按下deque。从数据块弹出一个分支,然后对分支中的数据求和。如果总和不为零,则将分支拆分为两个子分支,将这些子分支推到deque上。继续这样做,直到我找到非零基准。当我退出时,我应该在deque中以表单[1,'101']的单个项结束。

我强烈认为错误是

TypeError: 'int' object is not iterable
因为最终会将一个2元组作为
节点传递给

to_crawl = deque(group(node))
这给了你一个2元素的德克。然后

current = to_crawl.popleft()
为您提供一个元素(整数)作为
当前值
。这显然是不可测的,这会导致给定的错误

旁注:为了简洁起见,您可以这样使用sum

sum(current)
而不是

sum([x for x in current])

你能给我们看看你的
功能吗?因为它似乎对
to_crawl
变量的结构很重要。添加了,但我认为问题更局限于局部。您能给我们树本身的代码吗?我的意思是,如果我们没有类和用例,那么调试问题对我们来说有点困难。还有,有回溯吗?你确定错误消息说“int对象不可调用”而不是“int”对象不可调用吗?@Johannesharra是的,很抱歉我赶时间去开会。如果我用左键()int?我要做的是不断弹出树的分支并将其推到deque上,直到deque中只有一个[0,'101',然后退出循环。正如这里写的,一旦达到这个情况,它将继续弹出。
sum([x for x in current])