【发布时间】:2020-12-03 11:23:16
【问题描述】:
这里的第一个问题,所以如果我遗漏了一些重要的事情,请告诉我。 我有一个平衡的 AVL 树,我需要创建一个可以计算单个给定节点的平衡的函数。这需要在单个函数中递归进行。 (顺便说一下,这是用 Python 编写的)
我还包括了Node类的实例化方法,这样你就可以看到节点的属性。 到目前为止,我已经想出了这个,虽然它有效,但它仍然不符合标准:
class Node:
def __init__(self, value, root):
self.value = value # Node value
self.left = None # Left child
self.right = None # Right child
self.root = root # Stores the original root of the tree
def getBalance(self, node):
return self.getTreeHeight(node.right)-self.getTreeHeight(node.left)
def getTreeHeight(self, rootnode):
if rootnode == None:
return -1
else:
return max(self.getTreeHeight(rootnode.left), self.getTreeHeight(rootnode.right)) + 1
任何提示将不胜感激。 我所需要的只是朝着正确的方向轻推,因为老实说,我有点难过。
提前谢谢你!
【问题讨论】:
-
平衡的概念不是归纳的:当你知道一个节点的两个孩子的平衡时,你不能从那个信息中推导出节点本身的平衡。因此,如果解决方案需要使用递归,那么该递归将不仅仅是平衡。你不能希望创建一个
getBalance可以通过递归调用自身来完成这项工作。它要么需要返回的不仅仅是余额(如高度),要么依赖于另一个使用递归的函数。 -
为什么你的方法需要
node参数?你肯定会在节点上调用这些方法你希望他们提供信息,那么为什么你还需要这个参数呢?
标签: python tree binary-tree avl-tree