1. 程式人生 > >java--二叉樹增刪改查詳解

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+"更新失敗");
		}
	}

在這裡插入圖片描述