我正在学习java中的数据结构,到目前为止我已经做了bst和普通二叉树,在阅读了avl树的理论之后我尝试了avl树。我尝试实现avl树插入,并使用递归和休眠节点:
private Node insertB(Node node, int key){
if (node == null)
return (new Node(key));
if (key < node.data)
node.left = insertB(node.left, key);
else if (key > node.data)
node.right = insertB(node.right, key);
int balance = balanceFactor(node);
if (balance > 1 && key < node.left.data)
return rightRotate(node);
if (balance < -1 && key > node.right.data)
return leftRotate(node);
if (balance > 1 && key > node.left.data) {
node.left = leftRotate(node.left);
return rightRotate(node);
}
if (balance < -1 && key < node.right.data) {
node.right = rightRotate(node.right);
return leftRotate(node);
}
return node;
}
//rotate functions
public Node leftRotate(Node node){
Node rightNode = node.right;
Node leftChildOfRight = rightNode.left;
rightNode.left=node;
node.right=leftChildOfRight;
return rightNode;
}
它工作得很好,但是我想知道我们是否可以通过移动节点来完成,比如创建新的temp树并用这个新树的根替换我们正在执行旋转的节点?我只是想要一个解释,我会自己去实现的。谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!