📅  最后修改于: 2023-12-03 15:36:55.310000             🧑  作者: Mango
在二叉树中,叶节点是指既没有左儿子,也没有右儿子的节点。如果要删除值为 x 的叶节点,需要先找到该节点,然后将其删除。
以下代码演示了如何删除值为 x 的叶节点:
def delete_leaf(root, x):
if root is None:
return None
if root.left is not None and root.left.val == x and root.left.left is None and root.left.right is None:
root.left = None
elif root.right is not None and root.right.val == x and root.right.left is None and root.right.right is None:
root.right = None
else:
delete_leaf(root.left, x)
delete_leaf(root.right, x)
return root
上述代码中的 delete_leaf 函数接收两个参数:root 和 x。其中 root 表示二叉树的根节点,x 表示要删除的节点的值。
函数的实现方式比较简单。首先,如果根节点是空的,就返回 None。接着,检查左儿子和右儿子,如果它们的值分别为 x,并且它们既没有左儿子,也没有右儿子,那么将其删除。最后,递归地调用 delete_leaf 函数,在左子树和右子树中继续查找。
现在,我们可以使用 delete_leaf 函数删除二叉树中的值为 x 的叶节点了。以下示例演示了如何使用 delete_leaf 函数:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 构建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
# 打印原始二叉树
print("原始二叉树:")
def print_tree(root):
if root is None:
return
print(root.val)
print_tree(root.left)
print_tree(root.right)
print_tree(root)
# 删除值为 7 的叶节点
root = delete_leaf(root, 7)
# 打印修改后的二叉树
print("修改后的二叉树:")
print_tree(root)
运行上述代码,输出如下:
原始二叉树:
1
2
4
5
3
6
7
修改后的二叉树:
1
2
4
5
3
6
可以看到,原始二叉树包含值为 7 的叶节点。在调用 delete_leaf 函数后,值为 7 的叶节点被成功删除,修改后的二叉树不再包含该节点。