import type { Comparator, HeadlessNode, ITreeNode, SonicMap } from '../types';
import type { IAvlTreeNode } from './types';
export declare class AvlNode<K, V> implements IAvlTreeNode<K, V> {
    readonly k: K;
    v: V;
    p: AvlNode<K, V> | undefined;
    l: AvlNode<K, V> | undefined;
    r: AvlNode<K, V> | undefined;
    bf: number;
    constructor(k: K, v: V);
}
export declare const AvlMap: {
    new <K, V>(comparator?: Comparator<K>): {
        min: ITreeNode<K, V> | undefined;
        root: ITreeNode<K, V> | undefined;
        max: ITreeNode<K, V> | undefined;
        readonly comparator: Comparator<K>;
        set(k: K, v: V): import("../types").SonicNodePublicReference<ITreeNode<K, V>>;
        find(k: K): import("../types").SonicNodePublicReference<ITreeNode<K, V>> | undefined;
        get(k: K): V | undefined;
        del(k: K): boolean;
        clear(): void;
        has(k: K): boolean;
        _size: number;
        size(): number;
        isEmpty(): boolean;
        getOrNextLower(k: K): ITreeNode<K, V> | undefined;
        forEach(fn: (node: ITreeNode<K, V>) => void): void;
        first(): ITreeNode<K, V> | undefined;
        last(): ITreeNode<K, V> | undefined;
        readonly next: <N extends HeadlessNode>(curr: N) => N | undefined;
        iterator0(): () => undefined | ITreeNode<K, V>;
        iterator(): Iterator<ITreeNode<K, V>>;
        entries(): IterableIterator<ITreeNode<K, V>>;
        toString(tab: string): string;
    };
};
export type AvlMap<K, V> = SonicMap<K, V, AvlNode<K, V>>;
