如图删除 左边的2节点就等价删除左边的子树。
删除的算法:
s1: 先判断root是不是要删除的,要是是直接让root = null直接删除了整个树
s2:如root不是要删除的,那就判断他的左右节点是不是,要是是则让root的左孩子或者右孩子为null
s3:要是不是 那就找左右孩子的孩子
代码:
public void delet(Node target) {
//从根节点开始
if(root.getValue() == target.getValue()) {
root = null;
}else {
subDelet(root,target);
}
}
private void subDelet(Node root,Node target) {
Node parent = root;
//判断左儿子
if(parent.getLeft()!= null&&parent.getLeft().getValue() == target.getValue()) {
parent.setLeft(null);
}
//判断右儿子
if(parent.getRight()!= null&&parent.getRight().getValue() == target.getValue()) {
parent.setRight(null);
}
//当左右儿子都不是时,在看左右儿子的儿子
if(parent.getLeft()!= null) {
subDelet(parent.getLeft(),target);
}
if(parent.getRight()!= null) {
subDelet(parent.getRight(),target);
}
}