📜  删除值为 x 的叶节点(1)

📅  最后修改于: 2023-12-03 15:36:55.310000             🧑  作者: Mango

删除值为 x 的叶节点

在二叉树中,叶节点是指既没有左儿子,也没有右儿子的节点。如果要删除值为 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 的叶节点被成功删除,修改后的二叉树不再包含该节点。