private boolean remove(TreeUnit unit,int delData) {
//二叉树的右边进行删除
TreeUnit rightUnit = unit.rightUnit;//当前等于data的节点
if (unit.rightUnit != null) {
if (rightUnit.data == delData) {
unit.rightUnit = rightUnit.leftUnit; //data的上节点指向data的下一个左节点(右边最小)
if (rightUnit.rightUnit != null) {//如果data节点有右节点的话,
TreeUnit unit1 = rightUnit.leftUnit;
unit1.rightUnit = rightUnit.rightUnit;//指向新的data节点
}
System.out.println("-" + rightUnit.data+"-");
System.out.println("-" + delData+"-");
return true;//这里有问题,删除最后一个结点的时候进行了操作,但是没有返回true
}
}
//二叉树左边进行删除
if (unit.leftUnit != null) {
TreeUnit leftUnit = unit.leftUnit; //当前等于data的节点
if (unit.leftUnit.data == delData) {
unit.leftUnit = leftUnit.rightUnit;//data的上节点指向data的下一个右节点(左边最大)
if (leftUnit.leftUnit != null) {//如果data节点有左节点的话,
TreeUnit unit1 = leftUnit.rightUnit;
unit1.leftUnit = leftUnit.leftUnit;//指向新的data节点
}
return true;//这里有问题,删除最后一个结点的时候进行了操作,但是没有返回true
}
}
if (delData > unit.data) {
if (unit.rightUnit != null) {
remove(unit.rightUnit, delData);
}
} else if (delData < unit.data) {
if (unit.leftUnit != null) {
remove(unit.leftUnit, delData);
}
}
return false;
}
public boolean remove(int data){
return remove(root, data);
}
class Entrance {
public static void main(String[] args) {
MySubtree mySubtree = new MySubtree();
TreeUnit treeUnit = new TreeUnit(5);
mySubtree.root = treeUnit;
mySubtree.insert(3);
mySubtree.insert(9);
mySubtree.insert(11);
mySubtree.insert(2);
mySubtree.insert(7);
mySubtree.insert(4);
System.out.println(mySubtree.remove(11));
System.out.println(mySubtree.remove(2));
System.out.println(mySubtree.remove(4));
// 5
// 3 9
// 2 4 7 11
mySubtree.midOrder();//中序遍历
System.out.println();
mySubtree.preOrder();//先序遍历
System.out.println();
mySubtree.postOrder();//后序遍历
}
}
为啥运行结果是false啊,明明都执行到true前面了
删除最后一个节点时,会执行操作,但是没有返回true来表示删除成功。可以在删除最后一个节点时添加返回true语句来表示删除成功。
建议改成标志位,代替返回true/false