public void AVLinsert(int key) {
        Node uusi = insert(key);
        if (uusi == null) {
            return;
        }
        Node p = uusi.parent;
        // Tarkistetaan menikö puu epätasapainoon, jos meni niin suoritetaan tarvittavat kierrot
        while (p != null) {
            Node alipuu;
            int lChildHeight = -1, rChildHeight = -1;
            if (p.left != null) {
                lChildHeight = p.left.height;
            }
            if (p.right != null) {
                rChildHeight = p.right.height;
            }
            // Aiheuttaako vanhemman vasen lapsi epätasapainon
            if (lChildHeight == rChildHeight + 2) {
                balanceLeftChild(p);
                return;
            }
            // Aiheuttaako vanhemman oikea lapsi epätasapainon
            if (rChildHeight == lChildHeight + 2) {
                balanceRightChild(p);
                return;
            }
            lChildHeight = -1;
            rChildHeight = -1;
            if (p.left != null) {
                lChildHeight = p.left.height;
            }
            if (p.right != null) {
                rChildHeight = p.right.height;
            }
            p.height = kumpiKorkeampi(lChildHeight, rChildHeight) + 1;
            p = p.parent; // jatketaan kohti juurta
        }
    }