Python:使用递归方法获取二进制搜索树的高度

时间:2018-07-29 00:17:08

标签: python python-3.x binary-search-tree binary-search

对于我的任务,我试图通过线性时间来获取二进制搜索树的高度。教授指定他要我们在递归插入和删除方法中跟踪高度,但是我的在测试期间从未起作用。

教授的要求是:“在__Node类中添加一个属性以存储从该节点植根的子树的高度。在递归调用结束时返回节点引用之前,请将该节点的height字段更新为正确的值。”

我的想法是,如果插入或移除操作向左或向右移动,而不是从根本上进行更改,那么高度会增加/减少一个(但是我不确定如果还有剩余的内容,它如何工作) n级)。

我已经在这里附加了我的代码:

class Binary_Search_Tree:

  class __BST_Node:

    def __init__(self, value):
      self.value = value
      self.left=None   
      self.right=None
      self.height=0

  def __init__(self):
    self.__root = None  

  def __recur_ins(self, val,root):
    if root is None:
        root = Binary_Search_Tree.__BST_Node(val)
    elif root.value > val:
        root.left = self.__recur_ins(val,root.left) 
        root.height += 1
    elif root.value < val:
        root.right =self. __recur_ins(val,root.right)
        root.height += 1
    return root

  def __get_min(self,node):
    walker=node
    while walker.left is not None:
        walker=walker.left
    return walker

  def __recur_rem(self, val, root):
    if root is None:
        raise ValueError
    if root.value == val:
        if root.left is None:
            cur = root.right
            root = None
            return cur
        elif root.right is None:
            cur = root.left
            root = None
            return cur
        elif (root.left is not None) and (root.right is not None):
            cur = self.__get_min(root.right)
            root.value = cur.value
            root.right = self.__recur_rem(cur.value, root.right)
    elif val < root.value:
        root.left=self.__recur_rem(val,root.left)
        root.height -= 1
    elif val > root.value:
        root.right=self.__recur_rem(val, root.right)
        root.height -= 1
    return root

  def __actual_height(self,bst_node):
    if bst_node is None:
        return 0
    else:
        return self.__root.height

  def get_height(self):
    return self.__actual_height(self.__root)

非常感谢您!任何帮助将不胜感激!

0 个答案:

没有答案