添加节点,保持完全二叉树结构,Python代码
时间: 2024-11-30 20:16:24 浏览: 11
在Python中,为了添加节点并保持完全二叉树结构,你需要首先定义一个Node类表示每个节点,并确保插入操作能够维护树的性质,即除了最后一层外,所有层都是满的,且最右边的节点都尽可能地靠左。
这是一个简单的示例,假设我们有一个`Node`类:
```python
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert_and_balance(root, value):
# 先序遍历找到插入位置
if root is None:
return Node(value)
elif value < root.value:
root.left = insert_and_balance(root.left, value)
else:
root.right = insert_and_balance(root.right, value)
# 自底向上调整树,如果当前节点的左右子高度差超过1,则进行平衡旋转
height_diff = abs(get_height(root.left) - get_height(root.right))
if height_diff > 1:
if get_height(root.left) > get_height(root.right): # 左旋
if value < root.left.value:
return right_rotate(root)
else:
root.left = left_rotate(root.left)
return right_rotate(root)
else: # 右旋
if value > root.right.value:
return left_rotate(root)
else:
root.right = right_rotate(root.right)
return left_rotate(root)
return root
# 获取节点的高度辅助函数
def get_height(node):
if node is None:
return 0
return 1 + max(get_height(node.left), get_height(node.right))
# 旋转函数
def right_rotate(z):
y = z.left
T3 = y.right
y.right = z
z.left = T3
z.height = 1 + max(height(z.left), height(z.right))
y.height = 1 + max(height(y.left), height(y.right))
return y
def left_rotate(z):
y = z.right
T2 = y.left
y.left = z
z.right = T2
z.height = 1 + max(height(z.left), height(z.right))
y.height = 1 + max(height(y.left), height(y.right))
return y
```
在这个例子中,`insert_and_balance`函数会递归地插入新值,同时检查是否需要通过旋转来保持二叉搜索树的特性。每次插入后都会调用`get_height`和旋转函数来更新节点高度并保持树的平衡。
阅读全文