avl树插入不返回节点

pnwntuvh  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(213)

我正在学习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树并用这个新树的根替换我们正在执行旋转的节点?我只是想要一个解释,我会自己去实现的。谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题