Python 3:二进制搜索树无法设置节点

因此,我一直在从事实施二叉搜索树的此类项目。教授希望我们使私有递归同时使公众变得简单。(就像何时插入元素(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)

我知道这可能是一个非常愚蠢的问题,但是我真的没有自己一个人来解决这个问题。任何帮助将不胜感激,非常感谢!!!


浮云间
浏览 112回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python