gpt4 book ai didi

Java二叉搜索树删除没有子节点的节点

转载 作者:行者123 更新时间:2023-12-01 04:49:52 25 4
gpt4 key购买 nike

我正在处理要删除的节点是一个节点的情况。我不确定是否需要跟踪父节点,以便当我找到要删除的节点时,我可以将其父节点指针设置为空。但是我怎么知道要删除的节点是哪个子节点呢?我需要更多 if 语句吗?

感谢任何帮助,我觉得它不太复杂,但我只是对如何真正摆脱节点感到困惑。

这是我到目前为止所拥有的:

public void insert(E s) 
{
root = insert(s, root);
}

private Node<E> insert(E s, Node<E> T)
{
//easiest case, empty tree, create new tree
if(T == null)
{
T = new Node<E>(s);
}
//easiest case, found s
else if(s.compareTo(T.getData()) == 0)
{
System.out.println("Item already present.");
}
//s is greater than T, insert on right subtree
else if(s.compareTo(T.getData()) > 0)
{
T.setRight(insert(s, T.getRight()));
}
//s is less than T, insert on left subtree
else
{
T.setLeft(insert(s,T.getLeft()));
}
return T;
}

public void delete(E d)
{
delete( d, root);
}

private void delete( E d, Node<E> T)
{

if(T == null)
{

}
else if(d.equals(T.getData()))
{
System.out.println("it found the node at least");
if(T.getRight() == null && T.getLeft() == null)
{

}
//code other cases for a node with one child and node with two children
}
else if(d.compareTo(T.getData()) > 0)
{
System.out.println("going right");
delete(d, T.getRight());
}
//s is less than T, insert on left subtree
else
{System.out.println("going left");
delete(d,T.getLeft());
}

}

最佳答案

public Node<E> search(Node<E> node, E d)
{
while(node!=null && ((node.getLeft()!=null && !node.getLeft().getData().equals(d)) || (node.getRight()!=null && !node.getRight().getData().equals(d)))
{
if(d.compareTo(node.getData()) < 0)
{
node = node.getLeft();
}
else
{
node = node.getRight();
}
}

return node;
}

private void delete(E d)
{
// Search the node
Node parent = search(root, d);

// parent is the parent node under which the required node is present
// Now check which child it is - left or right
if(parent == null)
{
System.out.println("Element not found");
return;
}

if(parent.getLeft().getData().equals(d))
{
// Left child
parent.setLeft(null);
}
else
{
// Right child
parent.setRight(null);
}
}

注意:如果您有 parent Node<E>中的节点那么事情就很容易了。

关于Java二叉搜索树删除没有子节点的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170999/

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