为什么我的代码如果的第一种情况下,要是先删除左面的,右面就没法删除(我用的是gui界面)
例如
50
30 60
13 31
如果我先删除13,再删除31的时候就会出错
public boolean deleteNode(Node node) {
//Implementation Here...
if(root == null)
{
System.out.println("the tree is empty");
return false;
}
//delete node without any child
if(node.getLeft() == null && node.getRight() == null)
{
if(node.getValue() == root.getValue())
{
root = null;
return true;
}
else if(node.getParent().getLeft().getValue() == node.getValue())
{
node.getParent().setLeft(null);
node = null;
}
else if(node.getParent().getRight().getValue() == node.getValue())
{
node.getParent().setRight(null);
node = null;
}
}
Node curnode = null;
if(node.getRight() == null ){
curnode = node;
node = node.getLeft();
}
else if(node.getLeft() == null && node.getRight() != null){
curnode = node;
node = node.getRight();
}
else{
curnode = node;
Node tempnode = node;
tempnode = tempnode.getLeft();
while(tempnode.getRight() != null){
curnode = tempnode;
tempnode = tempnode.getRight();
}
node.setValue(tempnode.getValue());
if(curnode != node){
curnode.setRight(tempnode.getLeft());
}
else{
curnode.setLeft(tempnode.getLeft());
}
}
//The two variables below are for GUI use only.
select_node_value = -1;
selected_node = null;
return true;
}
老大,你的代码里面尿点太多,你没有碰到异常算你万幸,要改的话很多地方要动,只好贴个正常的代码,你自己仔细比较一下,体会体会,加深印象
图文并茂的代码地址:http://blog.csdn.net/sun_ru/article/details/51841648