所以我一直在做这个类项目,实现一个二进制搜索树。教授希望我们使私有递归,而使公共递归简单。(就像when to insert_element(50)一样,它调用一个私有函数recursive_insert(50,self.__root)来求解)。
我的插入函数运行时没有错误,但是测试用例总是返回空的,下面是我的私有函数的代码:
class Binary_Search_Tree:
class __BST_Node:
def __init__(self, value):
self.value = value
self.left=None
self.right=None
def __init__(self):
self.__root = None
self.__height=0
self.__size=0
def _in_order_str(self, root):
if root is None:
outcome= "[ ]"
elif self.__size==1:
outcome = "[ " + str(root.value) + " ]"
else:
outcome = "[ "
self._in_order_str(root.left)
outcome += str(root.value) +", "
self._in_order_str(root.right)
outcome+= " ]"
return outcome
def _recur_ins(self, val,root):
if root is None:
root=Binary_Search_Tree.__BST_Node(val)
elif root.value>val:
root.left = _recur_ins(val,root.left) #do I need self here?
elif root.value <val:
root.right = _recur_ins(val,root.right)
return root
这个是为公众准备的:
def insert_element(self, value):
self._recur_ins(value,self.__root)
self.__size+=1
我的测试用例:
def test_insertion_from_empty(self):
root=None
self.__bst.insert_element(50)
self.__bst.insert_element(30)
self.__bst.insert_element(70)
self.assertEqual('[ 30, 50, 70 ]', self.__bst.in_order())
更新:我认为问题出在我的_in_order_str(self, root):
方法上。我在网上找到的一般案例是:
def inorder(root):
if root is not None:
inorder(root.left)
print root.key
inorder(root.right)
我知道这可能是一个非常愚蠢的问题,但我自己真的搞不懂。任何帮助都将不胜感激,非常感谢!
https://stackoverflow.com/questions/51530678
复制相似问题