- 删除结点思路:
- 首先判断该树是否为空,为空则不能删除;
- 判断删除的是否是根结点,为根结点,则根结点置为空;
- 跳到结点遍历删除部分,判断根结点的左子树是否为空且判读左节点是否为删除的结点,是则左子树置空;
- 判断右子树是否为空且是否为删除的结点,是则右子树置空;
- 递归左子树;
- 递归右子树;
//删除结点
public void delNode(int no){
if (root != null){
//判读是否是删除root
if (root.getNo() == no){
root = null;
}else {//递归删除
root.delNode(no);
}
}else {
System.out.println("空树无法删除!!!");
}
}
//递归删除结点
//1.是叶子结点直接删除
//2.非叶子结点,则删除该子树
public void delNode(int no){
if (this.left !=null && this.left.no == no){
this.left = null;
return;
}
if (this.right != null && this.right.no == no){
this.right = null;
return;
}
if (this.left != null){
this.left.delNode(no);
}
if (this.right != null){
this.right.delNode(no);
}
}