Java 在二叉搜索树中添加元素
试图向BST添加一个元素。我知道如何做,但我的实现是破坏性的,并且原始根没有保留(因此树基本上变得无用)。树基于列表,此方法基于递归。我真正的问题是保留原始根。我用的是泛型 到目前为止,我有:Java 在二叉搜索树中添加元素,java,Java,试图向BST添加一个元素。我知道如何做,但我的实现是破坏性的,并且原始根没有保留(因此树基本上变得无用)。树基于列表,此方法基于递归。我真正的问题是保留原始根。我用的是泛型 到目前为止,我有: public void addElement(E elem, Node<E> root) { 否则,继续搜索树(通过将out节点a的值与树的根进行比较) if (!root.hasLeft() && !root.hasRight) { //if the root in que
public void addElement(E elem, Node<E> root) {
否则,继续搜索树(通过将out节点a的值与树的根进行比较)
if (!root.hasLeft() && !root.hasRight) { //if the root in question has no children
if (elem < rootValue) { //Set the element as the left element
root.setLeft(newNode);
}
else { //Set the element as the right element.
root.setRight(newNode);
}
}
else {
if (E < root.getElem()) {
//This is where the value of our node is compared to the value of the root, which we passed in.
//(I know that we can't use the < and > operators with generics, but assume it works).
root = root.getLeft() //Left node is new root
addElement(elem, root); //Call the method again
}
else {
root = root.getRight(); //Right node is new root
addElement(elem, root) //Call method again
}
}
if(!root.hasleet()&&&!root.haslright){//如果所讨论的根没有子级
如果(elem运算符与泛型一起使用,但假设它可以工作)。
root=root.getLeft()//左节点是新根
addElement(elem,root);//再次调用该方法
}
否则{
root=root.getRight();//右节点是新根
addElement(elem,root)//再次调用方法
}
}
}
如果这是一个重复的/模糊的问题,请原谅我,这是我第一次发表这样的帖子,我有点不知所措
if (!root.hasLeft() && !root.hasRight) {
这种逻辑是错误的。如果您既没有左子级也没有右子级,那么您只考虑“设置”左子级。此更改应该可以做到:
void addElement(elem, root)
{
if (elem < root.value) {
if(!root.hasLeft())
root.setLeft(newNode);
else
addElement(elem, root.getLeft());
}
else {
if(!root.hasRight())
root.setRight(newNode);
else
addElement(elem, root.getRight());
}
}
void addElement(元素,根)
{
if(elem
您不应该更改类的根,而应该将其传递到下一个方法调用中。这应该保留根
顺便说一句,我假设你有
rootValue=root.value
某个地方或类似的东西?你能展示一下你的setLeft
和setRight
的实现吗?这个算法现在是错误的。他只在没有子项的情况下设置子项。但在某些情况下,当你只有一个子项时,你还想将它设置为o另一个
void addElement(elem, root)
{
if (elem < root.value) {
if(!root.hasLeft())
root.setLeft(newNode);
else
addElement(elem, root.getLeft());
}
else {
if(!root.hasRight())
root.setRight(newNode);
else
addElement(elem, root.getRight());
}
}