public NodeAvlDni inserta(NodeAvlDni n) {
        NodeAvlDni r = this;
        if (!isLessThan(r.pacient.getDni(), n.pacient.getDni())) {
            if (r.fillEsquerra == null) {
                r.fillEsquerra = n;
            } else {
                r.fillEsquerra = r.fillEsquerra.inserta(n);
                if (alturaD(r.fillEsquerra) - alturaD(r.fillDret) == 2) {
                    if (!isLessThan(r.fillEsquerra.pacient.getDni(), n.pacient.getDni())) {
                        r = rotacioDreta(r);
                    } else {
                        r = dobleRotacioDreta(r);
                    }
                }
            }
        } else {//p.getDni().compareTo(pacient.getDni()) > 0
            if (r.fillDret == null) {
                r.fillDret = n;
            } else {
                r.fillDret = r.fillDret.inserta(n);
                if (alturaD(r.fillDret) - alturaD(r.fillEsquerra) == 2) {
                    if (isLessThan(r.fillDret.pacient.getDni(), n.pacient.getDni())) {
                        r = rotacioEsquerra(r);
                    } else {
                        r = dobleRotacioEsquerra(r);
                    }
                }
            }

        }
        r.altura = Math.max(alturaD(r.fillDret), alturaD(r.fillEsquerra)) + 1;
        return r;
    }