将节点值替换为python中树中的深度

时间:2014-02-11 18:35:18

标签: python-2.7 tree binary-search-tree

我需要填写此访问者类,以便它可以用于在一次通过中填充具有深度的节点 例如:
将树视为

                 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

1 个答案:

答案 0 :(得分:1)

您应该通过DepthVisitor初始化self.level = 0以获得级别属性。然后,您可以修改计数函数以使用该持久级别,因为它将存储在对象范围而不是函数范围中。您可以在函数调用中适当地递增和递减它。