欢迎访问宙启技术站
智能推送

通过Java函数实现搜索二叉树的插入和删除操作

发布时间:2023-06-23 08:11:22

搜索二叉树是一种特殊的二叉树,其中每个节点都包含一个键,且所有节点的键都大于其左子树中所有节点的键,小于其右子树中所有节点的键。

搜索二叉树的插入和删除操作都是相对比较简单直接的,下面我们就通过Java函数来实现这些操作。

插入操作

插入操作的大致流程如下:

1.首先,比较要插入的节点的键值与当前节点的键值大小,如果小于当前节点,则继续在当前节点的左子树中递归搜索,如果大于或等于当前节点,则在当前节点的右子树中递归搜索。

2.如果搜索到的位置为null,则在此位置新建一个节点,并把键值赋为要插入的键值。

3.如果搜索到的位置的键值与要插入的键值相同,则说明要插入的节点已经存在,不需要再次插入。

4.最后,需要更新整棵树的高度。

下面是Java函数实现:

public TreeNode insert(TreeNode root, int val) {
    if (root == null) {
        return new TreeNode(val);
    }
    if (val < root.val) {
        root.left = insert(root.left, val);
    } else if (val > root.val) {
        root.right = insert(root.right, val);
    }
    return root;
}

删除操作

删除操作是相对复杂一些的,需要分几种情况进行处理,大致流程如下:

1.首先,通过比较要删除的节点的键值与当前节点的键值大小,递归地查找要删除的节点。

2.如果找到了要删除的节点,则需要考虑三种情况:

(1)要删除的节点没有子节点:直接删除即可。

(2)要删除的节点只有一个子节点:把该子节点上移一层替代要删除的节点。

(3)要删除的节点有两个子节点:先找到该节点的中序后继节点,即该节点右子树中最小的节点,然后把该中序后继节点的值复制到要删除的节点中,并删除该中序后继节点。

3.最后,需要更新整棵树的高度。

下面是Java函数实现:

public TreeNode delete(TreeNode root, int key) {
    if (root == null) {
        return null;
    }
    if (key < root.val) {
        root.left = delete(root.left, key);
    } else if (key > root.val) {
        root.right = delete(root.right, key);
    } else {
        if (root.left == null && root.right == null) {
            root = null;
        } else if (root.left == null) {
            root = root.right;
        } else if (root.right == null) {
            root = root.left;
        } else {
            TreeNode successor = getSuccessor(root.right);
            root.val = successor.val;
            root.right = delete(root.right, successor.val);
        }
    }
    return root;
}
private TreeNode getSuccessor(TreeNode node) {
    while (node.left != null) {
        node = node.left;
    }
    return node;
}

总结

通过Java函数实现搜索二叉树的插入和删除操作是相对比较简单的,需要注意的是,对于删除操作,要分清三种情况,并且要注意更新整棵树的高度。