我正在尝试创建一个方法* set_number *,它接受一个值并将树中第一个级别的self.number设置为该给定值,并将树中下一个级别的self.number设置为之前的值(self.number)+ 1,等等第四。
这就是我到目前为止所提出的:
class Node:
def __init__(self, item, left=None, right=None):
self.item = item
self.left = left
self.right = right
self.number = 0
def set_number(self, value):
if self.left == None and self.right == None:
self.number = value
elif self.left:
self.number = max(self.number, self.left.set_number(value + 1))
elif self.right:
self.number = max(self.number, self.right.set_number(value + 1))
return self.number
我的意思的一个例子:
示例树:
5
/ \
2 6
tree = Node(5, Node(2), Node(6))
tree.set_number(2)
.set_number(2)对该树做了什么:
5 <- sets self.number to the given value in this case 2
/ \
2 6 <- sets self.number to the previous value + 1, in this case 2 + 1 = 3.
因此,自上次更改为self.number后,它应返回3.将其设置为3.我的代码就可以了。
另一个例子:
4
/ \
2 6
/ \ / \
1 3 5 7
tree = Node(5, Node(2, Node(1), Node(3)), Node(6, Node(5), Node(7)))
tree.set_number(5)
.set_number(5)对那棵树做了什么:
4 <- sets self.number to the given value, in this case 5
/ \
2 6 <- sets self.number to the previous self.number value + 1, in this case 5+1=6
/ \ / \
1 3 5 7 <- sets self.number to the previous self.number value + 1, in this case 6+1=7
因此,自上次更改为self.number后,它应该返回7.将其设置为7.我的代码就可以了。
但是这里我的代码似乎失败了:
4
/ \
2 6
/ \ / \
1 3 5 7
\
8
tree = Node(5, Node(2, Node(1), Node(3)), Node(6, Node(5), Node(7, None, Node(8))))
tree.set_number(1)
它应该返回4,因为它将第一级设置为1,第二级设置为2,第三级设置为3,第四级设置为4,但是返回3而不是4.我想知道是否有人可以帮我搞清楚哪里出错了,我需要做些什么改变才能解决这个问题。
答案 0 :(得分:1)
如果节点同时有左右孩子怎么办?在您的代码中,您有:
if self.left == None and self.right == None:
...
elif self.left:
...
elif self.right:
...
但是你会注意到,如果有一个左子项和右子项,elif self.left
块将执行,但elif self.right
块不会。将其更改为此应该有所帮助:
if self.left == None and self.right == None:
...
else
if self.left:
...
if self.right:
...