二叉排序樹刪除

2022-09-15 19:36:13 字數 2269 閱讀 6832

二叉排序樹的刪除情況比較複雜,有以下三種情況需要考慮

第一種情況:刪除葉子節點

思路:第二種情況:刪除只有一棵子樹的節點,比如1

思路:如果targetnode有右子節點

第三種情況:刪除有兩棵子樹的節點(比如:7,3,10)

思路:

public class binarysorttreedemo ;

binarysorttree binarysorttree = new binarysorttree();

for (int i = 0; i < arr.length; i++)

//遍歷

binarysorttree.midorder();

//測試刪除節點

binarysorttree.delnode(5);

binarysorttree.delnode(9);

binarysorttree.delnode(10);

binarysorttree.delnode(12);

binarysorttree.delnode(7);

binarysorttree.delnode(1);

binarysorttree.delnode(2);

binarysorttree.delnode(3);

system.out.println("刪除後");

binarysorttree.midorder();

}}class binarysorttree else

}//中序遍歷節點

public void midorder() else

}//查詢待刪除的節點

public node searchnode(int val) else

}//查詢待刪除的父節點

public node searchparentnode(int val) else

}//在待查詢二叉樹中找到最小的節點

public int searchrightmin(node node)

delnode(node.val); //刪除最小的節點

return node.val; //返回最小的節點值

}//刪除節點

public void delnode(int val) else

//如果這棵二叉樹只有乙個節點

if (this.root.left == null && this.root.right == null)

}//拿到待刪除節點的父節點

node parent = searchparentnode(val);

//如果刪除的葉子節點

if (targetnode.left == null && targetnode.right == null) else if (parent.right != null && parent.right.val == val)

} else if (targetnode.left != null && targetnode.right != null) else else else if(parent.right!=null && parent.right.val == val)

}}else else else if (parent.right!=null && parent.right.val == val)}}

}}}}class node

@override

public string tostring() ';

}//查詢待刪除節點的父節點

public node searchparentnode(int val) else else if (this.val <= val && this.right != null) else }}

//查詢到待刪除的節點

public node serachnode(int val) else if (this.val > val) else

} else else }}

//新增節點

public void addnode(node node) else

} else else }}

//中序遍歷

public void midorder()

system.out.println(this.val);

if (this.right != null) }}

構造二叉排序樹(BST) 二叉排序樹的刪除

主要是刪除操作 include include using namespace std typedef int elementtype typedef struct treenode threadtree void visit treenode node void inorder threadtre...

二叉排序樹的刪除

對於一般的二叉樹來說,刪去樹中的乙個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構 但是,對於二叉排序樹,刪去樹上的乙個結點相當於刪去有序序列中的乙個記錄,只要在刪除某個結點後不改變二叉排序樹的特性即可。在二叉排序樹上刪除乙個結點的演算法如下 btree delet...

二叉排序樹的刪除

在二叉排序樹中刪除一結點,要考慮刪除點子樹的情況,在刪除了指定點後,要將其子樹重新鏈結起來,分情況計論,如果想要刪除葉結點,只需將其父結點指向它的指標,指向null,再釋放它即可,如果被刪除結點的右子樹為空,可以拿它的左子樹結點頂替它的位置,再釋放它,如果被刪結點的左子樹為空,可以拿它的右子樹結子頂...