【发布时间】:2017-02-27 02:35:24
【问题描述】:
class TN:
def __init__(self,value,left=None,right=None):
self.value = value
self.left = left
self.right = right
def list_to_tree(alist):
if alist == None:
return None
else:
return TN(alist[0],list_to_tree(alist[1]),list_to_tree(alist[2]))
def str_tree(atree,indent_char ='.',indent_delta=2):
def str_tree_1(indent,atree):
if atree == None:
return ''
else:
answer = ''
answer += str_tree_1(indent+indent_delta,atree.right)
answer += indent*indent_char+str(atree.value)+'\n'
answer += str_tree_1(indent+indent_delta,atree.left)
return answer
return str_tree_1(0,atree)
def count(t,value):
nodes = []
num = 0
nodes.append(t)
while len(nodes) > 0:
if nodes[0] == value:
num += 1
next = nodes.pop(0)
count(next,value)
return num
我需要写一个递归函数count(其他三个函数不能改);它通过平衡二叉树和一个值作为参数。它返回值在树中的次数。在下面的二叉树中,count(tree,1) 返回 1,count(tree,2) 返回 2,count(tree,3) 返回 4
..1
....3
3
....3
..2
......2
....3
我调用了以下函数
tree = list_to_tree([3, [2, None, [3, None, None]], [1, [3, None, None], None]])
print('\nfor tree = \n',str_tree(tree))
for i in irange(1,3):
print('count(tree,'+str(i)+') = ', count(tree,i))
但它显示“RecursionError:比较中超出最大递归深度”的错误 有人可以帮我修复计数功能吗?提前致谢。
【问题讨论】:
-
Python 只能递归这么久stackoverflow.com/questions/3323001/… ... 但是我不认为这应该是您的程序的问题。但是我认为您的退出条件设置不正确。节点的长度是否曾经达到 0?我添加了 print 语句,节点的长度只有 1。这意味着你的 while 循环永远不会退出。
-
你有无限递归。你先
nodes.append(t),然后next = nodes.pop(0)(现在next等于t),然后调用count(t, value)。 -
顺便说一句,您不应该使用
next作为变量名,因为这会影响内置的next函数。
标签: python recursion binary-tree