export declare class BinaryTree<T = any> {
    private _parent;
    private _left;
    private _right;
    private _size;
    value: T;
    constructor(value: T);
    get size(): number;
    set parent(tree: BinaryTree<T>);
    get parent(): BinaryTree<T> | null;
    set left(tree: BinaryTree<T>);
    get left(): BinaryTree<T> | null;
    set right(tree: BinaryTree<T>);
    get right(): BinaryTree<T> | null;
    insert(value: T): BinaryTree<T>;
    remove(tree: BinaryTree<T>): void;
    removeWithValue(predicate: (value: T) => unknown): void;
    dfs(predicate: (value: T) => unknown): BinaryTree<T> | null;
    deepFirstSearch(predicate: (value: T) => unknown): BinaryTree<T> | null;
    bfs(predicate: (value: T) => unknown): BinaryTree<T> | null;
    breadthFirstSearch(predicate: (value: T) => unknown): BinaryTree<T> | null;
    traverseInOrder(callbackfn: (value: T) => void): void;
    traversePreOrder(callbackfn: (value: T) => void): void;
    traversePostOrder(callbackfn: (value: T) => void): void;
}
