gpt4 book ai didi

Python树实现-节点引用

转载 作者:行者123 更新时间:2023-12-01 04:20:04 27 4
gpt4 key购买 nike

我有这段代码可以在Python中实现一棵树。其中一个功能是求下面所有节点(包括其自身)的值之和,但这不起作用。

我认为原因是因为,一旦我创建了一个节点,我就无法返回并使用 Node (name, value) 访问它 - 这将创建一个具有该名称和值的新节点,而不是引用树中具有该名称和值的一个,并且具有与其链接的子级。

因此,sum_below 函数只是返回节点的值。如何引用树中的节点:

class Node(object):
def __init__(self, name, value):
self.name = name
self.value = value
self.children = []

def add_child(self, obj):
self.children.append(obj)

def sum_below(self):
if self.children == []:
return self.value
else:
ret = self.value
for child in self.children:
ret += child.sum_below()
return ret
def __str__(self, level = 0):
ret = "\t"*level+repr(self.value)+"\n"
for child in self.children:
ret += child.__str__(level+1)
return ret

[编辑]我的问题是,一旦创建节点,我就无法引用它:

#In [2]:

Node(1,100)
parent = Node(1,100)
child = Node(2, 200)
parent.add_child(child)

#In [5]:

print parent

#Out [5]:

100
200

#In [6]:

print Node(1,100)

#Out [6]:

100

所以你看,parent 和 Node(1,100) 并没有引用相同的东西。

[编辑]

#In [5]:
parent.sum_below()
#Out[5]:
300
#In [6]:
Node(1,100).sum_below()
#Out[6]:
100

在上面的代码中,Node(1,100).sum_below() 应该等于parent.sum_below(),因为它们应该引用同一个节点,但事实并非如此。

最佳答案

代码看起来没问题。我看到的唯一“不完美”是特殊情况:

if self.children == []: ...

根本不需要。简化版本:

def sum_below(self):
ret = self.value
for child in self.children:
ret += child.sum_below()
return ret

也可以。还可以使用 sum 进一步简化:

def sum_below(self):
return (self.value +
sum(child.sum_below() for child in self.children))

关于Python树实现-节点引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33852659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com