笔记
第一种删除叶子节点()
思路:
1.找到要删除的叶子
2.找到叶子的父节点parent
3.判断叶子是parent的左子节点还是右子节点4根据前面的情况对应删除
左子节点 parent.left=null
右子节点 parent.lright=null
第二种情况:
1.找到要删除的节点targetnode
2.找到叶子的父节点parent
3.确定targetnode的子节点是左子节点还是右子节点
(4)确定target是parent的左子节点还是右子节点
(5)如果targetnode有左子节点
5.1如果targetnode是parents的左子节点
Parent,left=targetnode.left
5.2如果targetnode是parents的右子节点
Parent.right=targetnode.left
(6)如果targetnode有右子节点
如果targetnode是parent的左子节点
Parent,left=targetnode.right
如果targetnode是parent的右子节点
Parent,right=targetnode.right
情况三 删除有两颗子树的节点
思路
(1)找到要删除的节点targetnode
2.找到叶子的父节点parent
(3)从targetnode的右子树找到最小的节点
(4)用一个临时变量,将最小节点的值保存在tamp中
(5)删除该最小节点
(6)targetnode.value=temp
本次新增了search和searchparent和delNode方法
注意:只实现了第一种情况的删除
public class BST {
public static void main(String[] args) {
int[]arr={
7,3,10,12,5,1,9,2};
BinarySortTree binarySortTree=new BinarySortTree();
for (int i = 0; i < arr.length; i++) {
binarySortTree.add(new Node(arr[i]));
}
System.out.println("中序遍历");
binarySortTree.infixOrder();
//删除节点
System.out.println("删除后");
binarySortTree.delNode(5);
binarySortTree.infixOrder();
}
}
class BinarySortTree{
private Node root;
public Node searc