我需要填写此访问者类,以便它可以用于在一次通过中填充具有深度的节点
例如:
将树视为
12
/ \
30 50
/ \ /
40 50 60
/
70
如果我认为一个树的前序遍历是
[12,30,40,50,50,60,70]
我应该得到的o / p(前序遍历)是
[0,1,2,2,1,2,3]
这意味着实际节点值必须用相应的深度替换
我写的访客函数是
class DepthVisitor(object):
def __init__(self):
self.result=[]
pass
def fill_depth(self, node):
def count(node, level):
if node!=None:
node.value=level
level+=1
count(node.left, level)
if node.left==None:
count(node.right,level)
count(node, 0)
pass
visitor = DepthVisitor()
pre_order(root, visitor.fill_depth)
问题是,每次将节点传递给访问者函数时,它的值都会被覆盖为0,因此o / p将作为
[0,0,0,0,0,0,0]
如何防止它将已访问过的节点值覆盖为0以获得正确的o / p 或者是否有任何替代/更好的方法来使用递归?
相同的w / o答案 0 :(得分:1)
您应该通过DepthVisitor
初始化self.level = 0
以获得级别属性。然后,您可以修改计数函数以使用该持久级别,因为它将存储在对象范围而不是函数范围中。您可以在函数调用中适当地递增和递减它。