java二叉树删除如何操作?

2020-04-21 13:34:01 java常见问答 7059

今天所讲的是二叉树的删除,小伙伴们点进来,肯定是对二叉树有说了解的吧啊,首先学习二叉树删除,建议先了解诶二叉树的建立,遍历,插入和查找,以便小伙伴们能够很好的掌握今天小编所讲的内容,接下来让我们一起来了解下吧。

二叉树的删除操作是比较复杂的。首先要找到删除的节点。要删除的结点对象并不一定要进行删除操作。因为通过函数调用得到的只是他的副本。并不会真正的把他删掉。你只要让他不在树上就行了。让删除结点的父节点,左右孩子结点用新的结点来指向就可以把该结点从树上进行删除了。

然后找到要插入的结点。有三种情况来进行找:

1.删除结点有左孩子

这种情况下,找到左孩子的最右孩子。找到的结点是要上去的结点。如果该左孩子没有右孩子,则该左孩子是要上去的结点。

2.删除结点没有左孩子,有右孩子

要上去的结点是最右孩子。

3.删除结点没有孩子(叶节点)

这种情况直接让指向他的父结点指向空就行了,就把他从树上删除了。

注意事项:

原来删除结点的左右孩子结点和父结点不用管,只要把该插入结点的值给删除结点就行了,同时你还要把上去的结点的孩子结点处理一下。这样可以不影响后续的操作。

总而言之就是把插入结点的值给删除节点。然后做一下交接,不能影响后续的操作,也不要破坏二叉排序树的性质就行了。推荐在纸上画一个排序树,然后试着删除一个结点,看看怎么处理上去的结点。

理论是不是已经掌握好了?接下来给大家通过代码的方式给大家展示。

public void Delete(Tree root, int value)
{
    Tree temp = new Tree();
    temp = Select(root, value);
    if (temp.value == 0)
    {
        System.out.println("你要删除的数值" + value + "不存在");
    }
    else
    {
        Tree p = new Tree();
        Tree node = new Tree();
        Tree parent = new Tree();
        p = p.Select(root, value); //p是要删除的结点
        node = p;
        if (p != null)
        {
            if (p.left != null)
            {
                p = node.left;
                while (p.right != null)
                {
                    p = p.right;
                }
                node.value = p.value;
                if (node.left.right == null)
                {
                    node.left = p.left;
                }
                else
                {
                    p.parent.right = p.left;
                }
            }
            else if (p.right != null)
            {
                p = p.right;
                node.value = p.value;
                node.left = p.left;
                node.right = p.right;
            }
            else
            {
                if (p.equals(p.parent.left))
                {
                    p.parent.left = null;
                }
                if (p.equals(p.parent.right))
                {
                    p.parent.right = null;
                }
            }
            System.out.println("");
            System.out.println("数据" + value + "删除成功");
        }
    }
}

以上就是今天所讲的二叉树删除的java常见问答,如果想要了解更多,请继续关注本网站。