Python 如何计算二叉树的叶子数?
我遇到了一个递归错误,我能解决这个问题吗?有人能给我解释一下如何计算二叉树的叶子吗?计算叶子时,你总是从self节点重复Python 如何计算二叉树的叶子数?,python,python-3.x,Python,Python 3.x,我遇到了一个递归错误,我能解决这个问题吗?有人能给我解释一下如何计算二叉树的叶子吗?计算叶子时,你总是从self节点重复 def count_leaves(self): ptr = self.root counter = 0 if ptr.left is None and ptr.right is None: counter += 1 if ptr.left: counter += s
def count_leaves(self):
ptr = self.root
counter = 0
if ptr.left is None and ptr.right is None:
counter += 1
if ptr.left:
counter += self.count_leaves()
if ptr.right:
counter += self.count_leaves()
return counter
第二个问题似乎与如何添加节点有关
比如说,
def count_leaves(self):
ptr = self.root # reseting at the root
...
counter += self.count_leaves() # recurses from the top of the tree
所以,基本上ptr.left=ptr.left,在ptr!=没有
您需要向下迭代。我通常在节点类上实现所有递归方法,而不是在树类中传递指针
def recurse_add(self, ptr, item):
if prt == None:
# say this is false
ptr.left = self.recurse_add(ptr.left, item)
...
return ptr # The recursive call will return 'ptr.left'
提高递归限制sys.setrecursionlimit,或者不使用递归。您是如何得到此错误的?我们无法看到您的树或您调用函数的位置。我不确定您的BST类从节点继承是否有意义。一棵树有一个根节点,但你永远不会说一棵树本身就是一个节点。@cricket\u 007它应该返回一个计数器变量,我用一个字符串测试这个函数,例如>>>“叶数是”,counter@Blckknght就这么走了谢谢。很好,那么您的一个节点正在循环回自身。因为我们看不到你是怎么造树的,所以很难说
def recurse_add(self, ptr, item):
if prt == None:
# say this is false
ptr.left = self.recurse_add(ptr.left, item)
...
return ptr # The recursive call will return 'ptr.left'
class Node(object):
def __init__(self, item, left = None, right = None):
self.item = item
self.left = left
self.right = right
def is_leaf(self):
return self.right is None and self.left is None
def add(self, item):
if item <= self.item:
self.left = Node(item) if self.left is None else self.left.add(item)
elif item > self.item:
self.right = Node(item) if self.right is None else self.right.add(item)
return self
def count_leaves(self):
counter = 0
if self.is_leaf():
counter += 1
if self.left is not None:
counter += self.left.count_leaves()
if self.right is not None:
counter += self.right.count_leaves()
return counter
class BST:
def __init__(self):
self.root = None
def is_empty(self):
return self.root is None
def add(self, item):
if self.is_empty():
self.root = Node(item)
else:
self.root.add(item)
def count_leaves(self):
return 0 if self.is_empty() else self.root.count_leaves()