gpt4 book ai didi

java - 二叉树-如何删除元素; java

转载 作者:行者123 更新时间:2023-12-01 18:27:08 25 4
gpt4 key购买 nike

node root=null;

public node delete(node node, int val) {
if(node == null) {
return node;
}

if(val < node.value) {
node.left= delete(node.left, val);
} else if(val > node.value) {
node.right= delete(node.right, val);
} else {
if(node.left== null || node.right== null) {
node temp = node.left!= null ? node.left: node.right;

if(temp == null) {
return null;
} else {
return temp;
}
} else {
node next = getSuccessor(node);
node.value= next.value;
node.right= delete(node.right, next.value);
return node;
}
}

return node;
}
public node getSuccessor(node node) {
if(node == null) {
return null;
}

node temp = node.right;

while(temp.left!= null) {
temp = temp.left;
}

return temp;
}

这是我的代码这是节点的类:

public class node {
int value;
node left;
node right;
}

我已经有一个可以添加值的工作代码。问题是,当我添加值并尝试使用我刚刚在此处编写的代码删除其中一些值时,它不起作用。这是我在尝试删除值时在主类中放入的内容:

binarytree tree= new binarytree;
node root=null;
root=tree.delete(root,4);

有人知道可能出了什么问题吗?我是否缺少一个引用删除或类似内容的函数?请注意,我是java新手,所以如果你想帮助我,请将我视为初学者如果有人可以帮助我使我的删除功能正常工作,我真的很感激,因为现在它根本没有做任何事情......

编辑:

添加值的代码:

void recadd(node a, int val) {
if (val<a.value) {
if (a.left==null){
a.left=new node (val);
}
}
else
{
if(a.right==null) {
a.right=new node(val);
}
else {
recadd(a.right, val);
}
}
}

我用来调用添加函数的代码:

void add(int val){
node k = new node (val);
if (root==null)
{
root = k;
}
else
{
recadd(root, val);
}
}

如前所述,我可以很好地添加值,当我尝试删除它们时会出现问题。

最佳答案

你的代码应该可以工作。也许您插入元素的方式有问题。您能分享一下您的完整代码吗?

关于java - 二叉树-如何删除元素; java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60214496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com