python - 如何通过一个函数调用更新二叉树中所有节点的高度?
问题描述
我有一个由此类节点组成的二叉树:
class Node:
def __init__(self,key,parent=None,right=None,left=None):
self.key = key
self.left = left
self.right = right
self.parent = parent
self.height = 0
树构造的一个示例可能是:
a = Node(1)
a.left = Node(2,parent=a)
a.right = Node(5,parent=a)
a.right.right = Node(3,parent=a.right)
我想编写一个函数来更新这棵树中所有节点的高度。我找到了获取一个节点高度的方法。但是,我想一次更新所有高度。
我怎么能这样做?
解决方案
您可以添加此递归方法:
def syncheight(self):
self.height = max(
-1 if self.left is None else self.left.syncheight(),
-1 if self.right is None else self.right.syncheight()
) + 1
return self.height
您可以在根目录上调用它,如下所示:
a.syncheight()
请注意,我将调用该类Node
而不是node
,并且您的参数名称与构造函数主体中使用的名称不同(left
, leftChild
)
建议
我不会将 传递parent
给构造函数,因为这应该遵循传递为left
和的信息right
。后者应该parent
更新他们的属性以引用当前创建的节点。
height
然后,您还可以通过更新新创建节点的祖先的高度来保持更新:
class Node:
def __init__(self, key, left=None, right=None):
self.key = key
self.left = left
self.right = right
self.parent = None
if left:
left.parent = self
if right:
right.parent = self
self.height = -1
self.bubbleheight()
def bubbleheight(self):
height = max(
-1 if self.left is None else self.left.height,
-1 if self.right is None else self.right.height
) + 1
if height != self.height:
self.height = height
if self.parent is not None:
self.parent.bubbleheight()
tree = Node(1,
Node(2),
Node(5,
Node(3)
)
)
print(tree.height) # 2
推荐阅读
- python - 类型错误:press() 缺少 1 个必需的位置参数:“按钮”
- html - 如何将背景颜色添加到具有特定类的奇数元素?
- javascript - 如何将多维数组转换为二维数组?
- python - 动态创建一个类的多个实例是好习惯吗?备择方案?
- javascript - 如何使用多个表格数据只渲染一次页面,它们之间没有关系?
- typescript - Vuejs 3 - 如何从 data() 和 setup() 之外的其他钩子将数据发送到模板?
- swift - 无法在 Playground 中创建具有 3 个以上变量的嵌套结构
- c++ - 使用 sfml 从对象向量中绘制
- function - 为什么“结果:= char 变量”让我访问冲突?
- sockets - SSE 支持多少客户?