学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站
要求
(1) 如果删除的节点是叶子节点,则删除该节点
(2) 如果删除的节点是非叶子节点,则删除该子树.
(3) 测试,删除掉 5 号叶子节点 和 3 号子树.
(4) 完成删除思路分析
完整代码请查阅上一篇博文
Node类
//递归删除结点
//如果删除的是叶子结点,则删除该结点
//如果删除的是非叶子结点,则删除该子树
public void delNode(int no){
//当前结点的左结点不为空,且就是要删除的结点
if (this.leftNode != null && this.leftNode.no == no){
this.leftNode = null;
return;
}
//当前结点的右结点不为空,且就是要删除的结点
if (this.rightNode != null && this.rightNode.no == no) {
this.rightNode = null;
return;
}
//向左递归
if (this.leftNode != null){
this.leftNode.delNode(no);
}
//向右递归
if (this.rightNode != null){
this.rightNode.delNode(no);
}
}
二叉树类
//删除结点
public void delNode(int no){
if (rootNode != null) {
//如果只有一个结点,且为删除结点
if (rootNode.getNo() == no){
rootNode = null;
}else {
//递归删除
rootNode.delNode(no);
}
}else {
System.out.println("空树");
}
}