思路分析
首先先处理:
考虑如果树是空树root,如果只有一个root节点,则等价二叉树置空
然后进行下列操作:
1.因为我们的二叉树是单向的,所以我们判断当前节点的子节点是不是需要删除的节点,而不能判断当前节点是不是需要删除的节点
2.如果当前节点的左子节点不为空,并且左子节点就是要删除的节点,就将this.left=null,并返回
3.如果当前节点的右子节点不为空,并且右子节点就是要删除的节点,就将this.right=null,并返回
4.如果第二步和第三步没有删除节点,那我们就向左子树进行递归
5.如果第四步也没有删除节点,则应当向右子树进行递归
代码实现
//递归删除节点
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);
return;
}
if(this.right!=null) {
this.right.delNode(no);
return;
}
}
//删除节点
public void delNode(int no) {
if(root!=null) {
//如果只有一个root节点,要立即判断root是否为要删除的节点
if(root.getNo()==no) {
root=null;
}else {
root.delNode(no);
}
}else {
System.out.println("空树, 不能删除");
}
}
版权声明:本文为qq_45739810原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。