如何删除 java 中的二叉树的根?
How to remove the root of an binary tree in java?
如何去除二叉树的根?
private static NodeClass remove(int deleteThisItem, NodeClass item) {
deleted=false;
if(item==null)
return item;
///////////////////////////////////////////
if(deleteThisItem<item.value)
item.left=remove(deleteThisItem,item.left);
else if(deleteThisItem>item.value)
item.right=remove(deleteThisItem,item.right);
///////////////////////////////////////////////
deleted=false;
if(item==null)
return item;
///////////////////////////////////////////
if(deleteThisItem<item.value)
item.left=remove(deleteThisItem,item.left);
else if(deleteThisItem>item.value)
item.right=remove(deleteThisItem,item.right);
///////////////////////////////////////////////
else if(deleteThisItem==item.value){
if(item.left!=null&&item.right!=null){
item.value=findMax(item.left).value;
item.left=remove(item.value,item.left);
deleted=true;
}
else if(item.left!=null){
item=item.left;
deleted=true;
}
else if( item.right!=null){
item=item.right;
deleted=true;
}
}
else {
System.out.println("hata");
System.exit(0);
}
return item;
这是我的删除方法。这种方法效果很好,但我无法删除根。
这是我的主要方法:
if(command.equals("R")){
int value=scan.nextInt();
remove(value) ;
if(getDeleted())
System.out.println(value+" removed.");
else
System.out.println(value+" cannot found in the tree!.");
}
例如,如果树的根是 10,我想删除 it.When 我尝试删除它,我得到了:
10 cannot found in the tree!.
我像这样调用删除:
private static boolean deleted=false;
public static void remove(int key) { //This method called from my main
root=remove(key,root);
}
public static boolean getDeleted(){
return deleted;
}
您无法删除根节点,因为您的代码在内部 if / else if / else if
语句之后缺少 else
语句。这意味着您没有涵盖所有情况(具有单个节点的树就是这样一种情况)。
紧接着
else if(item.right != null)
{
item = item.right;
deleted = true;
}
添加一个else
块
else
{
item = null;
deleted = true;
}
如何去除二叉树的根?
private static NodeClass remove(int deleteThisItem, NodeClass item) {
deleted=false;
if(item==null)
return item;
///////////////////////////////////////////
if(deleteThisItem<item.value)
item.left=remove(deleteThisItem,item.left);
else if(deleteThisItem>item.value)
item.right=remove(deleteThisItem,item.right);
///////////////////////////////////////////////
deleted=false;
if(item==null)
return item;
///////////////////////////////////////////
if(deleteThisItem<item.value)
item.left=remove(deleteThisItem,item.left);
else if(deleteThisItem>item.value)
item.right=remove(deleteThisItem,item.right);
///////////////////////////////////////////////
else if(deleteThisItem==item.value){
if(item.left!=null&&item.right!=null){
item.value=findMax(item.left).value;
item.left=remove(item.value,item.left);
deleted=true;
}
else if(item.left!=null){
item=item.left;
deleted=true;
}
else if( item.right!=null){
item=item.right;
deleted=true;
}
}
else {
System.out.println("hata");
System.exit(0);
}
return item;
这是我的删除方法。这种方法效果很好,但我无法删除根。 这是我的主要方法:
if(command.equals("R")){
int value=scan.nextInt();
remove(value) ;
if(getDeleted())
System.out.println(value+" removed.");
else
System.out.println(value+" cannot found in the tree!.");
}
例如,如果树的根是 10,我想删除 it.When 我尝试删除它,我得到了:
10 cannot found in the tree!.
我像这样调用删除:
private static boolean deleted=false;
public static void remove(int key) { //This method called from my main
root=remove(key,root);
}
public static boolean getDeleted(){
return deleted;
}
您无法删除根节点,因为您的代码在内部 if / else if / else if
语句之后缺少 else
语句。这意味着您没有涵盖所有情况(具有单个节点的树就是这样一种情况)。
紧接着
else if(item.right != null)
{
item = item.right;
deleted = true;
}
添加一个else
块
else
{
item = null;
deleted = true;
}