【问题标题】:Replace node values with their depths in a tree in python用python中树的深度替换节点值
【发布时间】:2014-02-11 18:35:18
【问题描述】:

我需要填充这个访问者类,以便它可以用于在单遍中填充具有深度的节点
示例:
将树视为

                 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??

【问题讨论】:

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


    【解决方案1】:

    您应该通过执行self.level = 0 来初始化您的DepthVisitor 以具有级别属性。然后,您可以修改您的计数函数以使用该持久级别,因为它将存储在对象范围而不是函数范围中。您可以在函数调用之间酌情增加和减少它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2021-06-27
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多