【发布时间】: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