对于二叉树的删除节点的操作一般有三种情况
1.后继无人 就是该节点没有左孩子 右孩子
2.后继有右 就是该节点只有一个节点(可以是左孩子 也可以是右孩子)
3.后继有俩 就是该节点有左右孩子
情况1:
删除了该节点 则该节点的状态为空了
一个二叉树已经是有了大小顺序 设置要删除的节点的值为key 如果key的值大于root的值 就直接向右边找 如果不是往左边找 然后查找是否存在相同值得节点 如果找到得话 就直接删除该节点即可
语句:
public boolean delete(int key){
Node cur = root;
Node pre = root;
//先假设左孩子是不存在得
boolean islc = null;
//查找我们要查找的值是否在树里面存在
while( cur.data != key){
//将当前赋值为父节点
pre = cur;
//将key进行划分为是哪一类得
if(cur.data > key){
//可以达到Key是属于左孩子得
//所以假设左孩子是存在 才好继续往下找
islc = true;
cur = cur.lc;
}
else{
//要寻找得不在根节点得左孩子的系列 属于右孩子 就没有必要往左孩 //子那边进行寻找 就将左孩子设置为空
islc = false;
cur = cur.rc;
}
//特殊情况
if( cur == null){
return null;
}
}
//现在是我们要查找的值 没有后代节点 所以我们对其进行删除
//没有左右孩子
if(cur.lc == null && cur.rc == null){
//现在就是进行逐步分析
//只有一个节点
if(cur == root){
//将根节点判空
root = null;
}
//假如是左孩子 就得删除
if(islc){
//就将左孩子赋值为空
pre.lc = null;
}
else{
pre.rc = null;
}
retrun true;
}
retrun false;
}
关于二叉树的删除节点的想法1
猜你喜欢
转载自blog.csdn.net/shuyan745294340/article/details/88585163
今日推荐
周排行