def sum(root):
if root.children == []:
return root.value
else:
temp = 0
for n in root.children:
temp += sum(n)
temp+= root.value
return temp
我让我的函数以递归方式工作,并试图找出一种简单的方法来迭代地完成它。我只是想找到关于我是否会使用while循环或什么的指导。
答案 0 :(得分:4)
使用队列或堆栈;从队列或堆栈中获取一个元素,将值添加到运行总计中,将所有子项添加到队列或堆栈中,然后处理下一个元素。使用在队列或堆栈为空时结束的while
循环。
堆栈和队列之间的唯一区别是,您要么首先处理元素深度(堆栈),要么首先处理呼吸(队列)。
您的递归代码是深度优先的,因此要迭代地复制相同的行为,请使用堆栈:
def sum_nodes_iteratively(root):
elements = [root]
total = 0
while elements:
element = elements.pop()
elements.extend(element.children)
total += element.value
return total
演示:
>>> class Node(object):
... def __init__(self, value, children):
... self.value = value
... self.children = children
...
>>> def sum_nodes_iteratively(root):
... elements = [root]
... total = 0
... while elements:
... element = elements.pop()
... elements.extend(element.children)
... total += element.value
... return total
...
>>> sum_nodes_iteratively(Node(1,[Node(2,[]),Node(3,[Node(4,[Node(5,[]),Node(6,[Node(7,[])])])])]))
28