【发布时间】:2016-01-24 10:18:25
【问题描述】:
我正在尝试编写一个函数,通过合并我的 BinaryTree 类来计算二叉树的叶子数:
这是我的二叉树类:
class BinaryTree:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def insert_left(self, new_data):
if self.left == None:
self.left = BinaryTree(new_data)
else:
t = BinaryTree(new_data)
t.left = self.left
self.left = t
def insert_right(self, new_data):
if self.right == None:
self.right = BinaryTree(new_data)
else:
t = BinaryTree(new_data)
t.right = self.right
self.right = t
def get_left(self):
return self.left
def get_right(self):
return self.right
def set_data(self, data):
self.data = data
def get_data(self):
return self.data
这是我编写的函数:目前它没有输出正确的值。我认为我的递归有问题,但我无法弄清楚:
def num_leaves(my_tree):
count = 0
if my_tree.get_left() and my_tree.get_right() is None:
count += 1
if my_tree.get_left():
num_leaves(my_tree.get_left())
if my_tree.get_right():
num_leaves(my_tree.get_right())
return count
输入和输出的示例是:
a = BinaryTree(1)
a.insert_left(2)
a.insert_right(3)
print(num_leaves(a))
输出:
0
而不是 2。
我的函数背后的想法是它递归直到找到左右子树都为None的节点,然后将其加一计数。这样它就找到了每一片叶子。
我做错了什么?
【问题讨论】:
-
您需要学习如何使用调试器。使用它,您可以逐步检查
num_leaves()的代码并检查count的值,以找出它与您的预期不同的地方。使用它,您的问题将变得微不足道。
标签: python recursion binary-tree