[英]Rotation of AVL Tree nodes results in nodes disappearing
我试图用Java编写AVL树,并且在此上停留了两个晚上。 当运行以下代码时,当然会发生旋转,但是例如说leftRotate的最终结果是我丢失了节点。
public AVLNode leftRotate(AVLNode node){ //receives the grandparent node
AVLNode temp = node.right;
node.right = temp.left;
temp.left = node;
return temp;
}
public AVLNode rightRotate(AVLNode node){
AVLNode temp = node.left;
node.left = temp.right;
temp.right = node;
return temp;
}
public AVLNode rightLeftRotate(AVLNode node){
node.right = rightRotate(node.right);
return leftRotate(node);
}
public AVLNode leftRightRotate(AVLNode node){
node.left = leftRotate(node.left);
return rightRotate(node);
}
如果我向左右旋转方法添加root = temp
,则旋转和新显示仅在第一次旋转时成功发生,然后所有东西混合在一起。
示例:先插入4、5,然后再插入6。旋转之后, temp
保持5作为其“根”,正确包含4和6作为其左右子项的键。 但是,方法结束后所有这些都消失了,并且树根的左右子级现在为空。
我知道我想念的东西很小,但我无法将它包裹住。
我还知道这不是我的addNode
函数,因为完成所有节点的添加后,无论如何,结果树都是二叉搜索树。 只有在调用这些函数时,我才开始丢失节点。 有什么帮助吗?
我认为这是一个如何管理内存的问题,而不是AVLNode temp = node.left; or AVLNode temp = node.left;
AVLNode temp = node.left; or AVLNode temp = node.left;
实例化一个新的AVLNode并复制信息,因此您没有指向先前对象的指针。 发生的是,当您执行AVLNode时,temp = node.left;。 temp是指向node.left的指针,因此,如果返回temp,则所有更改和旋转都将对原始节点进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.