java--二叉树增删改查详解

二叉树的删除和修改

建议读者先看二叉树的建立,遍历,插入和查找

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

然后找到要插入的结点。

找法有三种情况:

  • 删除结点有左孩子
    这种情况下,找到左孩子的最右孩子。找到的结点是要上去的结点。如果该左孩子没有右孩子,则该左孩子是要上去的结点。
  • 删除结点没有左孩子,有右孩子
    要上去的结点是最右孩子。
  • 删除结点没有孩子(叶节点)
    这种情况直接让指向他的父结点指向空就行了,就把他从树上删除了。

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

虽然说得有些绕,不过其实也没什么东西。就是把插入结点的值给删除节点。然后做一下交接,不能影响后续的操作,也不要破坏二叉排序树的性质就行了。建议在纸上画一个排序树,然后试着删除一个结点,看看怎么处理上去的结点。

下面看代码:

	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+"删除成功");
			}
		}
	}
System.out.println("树初始化序列为:");
	init.Bst(tree[0]);
	init.Delete(tree[0], 18);
	init.Bst(tree[0]);
	System.out.println("");
	init.Delete(tree[0], 88);
	init.Bst(tree[0]);

在这里插入图片描述

  • 更新操作比较简单:
    调用select和delete和insert函数就可以
    先把他从树上删除,然后再insert到树上
	public void Update(Tree root,int value,int update) {
		Tree temp=new Tree();
		temp=temp.Select(root, value);
		if(temp.value==value) {
		Delete(root,value);
		Tree a= new Tree(update);
		insert(root,a);
		System.out.println("数据"+value+"成功更新成"+update);
		}
		else {
			System.out.println("数据"+value+"更新失败");
		}
	}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43279637/article/details/82930251