对于我的任务,我试图通过线性时间来获取二进制搜索树的高度。教授指定他要我们在递归插入和删除方法中跟踪高度,但是我的在测试期间从未起作用。
教授的要求是:“在__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)
非常感谢您!任何帮助将不胜感激!