type TIterator = (node: Tree) => boolean;
export interface ITree {
    iterate(): boolean;
}
export declare class Tree<T extends ITree = ITree> {
    data: T;
    parent: Tree;
    children: Set<Tree>;
    private childrenArray;
    protected childrenDirty: boolean;
    protected zIndexGroups: Map<number, Set<Tree>>;
    protected zIndexChildrenCache: {
        get: () => Tree<ITree>[];
        reset(): void;
        clear(): void;
    };
    renderOrder: number;
    zIndex: number;
    constructor(data: T, parent?: Tree);
    append(node: Tree): void;
    protected addInZIndex(node: Tree): void;
    protected removeZIndex(node: Tree): void;
    remove(node?: Tree): void;
    setChildren(nodes: Tree[]): void;
    updateZIndex(index: number): void;
    updateChildZIndex(child: Tree): void;
    clearChildren(): void;
    traverseDown(iterator: TIterator): void;
    private _traverse;
    protected getChildrenArray(): Tree<ITree>[];
    protected _walkDown(iterator: TIterator, order: number): void;
}
export {};
