Невозможно вызвать выражение, тип которого не имеет подписи вызова. BinaryTree Type Script - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь реализовать двоичное дерево поиска в Type Script, используя универсальные типы. Однако у меня есть проблема с добавлением дочернего элемента в узел, потому что возникает ошибка, когда parent.leftChild (newNode) - «Невозможно вызвать выражение, тип которого не имеет сигнатуры вызова. Тип Node не имеет совместимых сигнатур вызова.»

export { };

class  Node <T> {
    private _key: number;
    private _data: T;
    private _leftChild: Node <T>;
    private _rightChild: Node <T>;
    constructor(key: number, data: T) {
        this._key = key;
        this._data = data;
    }
    get key(): number {
        return this._key;
    }
    get data(): T {
        return this._data;
    }
    get leftChild(): Node <T> {
        return this._leftChild;
    }
    get rightChild(): Node <T> {
        return this._rightChild;
    }
    set leftChild(child: Node <T>) {
        this._leftChild = child;
    }
    set rightChild(child: Node <T>) {
        this._rightChild = child;
    }
}

class BinaryTree <H> {
    private _root: Node<H>;
    public addNode(key: number, data: H): void {
        const newNode: Node <H> = new Node <H> (key, data);
        if (this._root == null) {
            this._root = newNode;
        } else {
            let focusNode: Node <H> = this._root;
            let parent: Node <H>;
            while (true) {
                parent = focusNode;
                if (key < focusNode.key) {
                    focusNode = focusNode.leftChild;
                    if (focusNode == null) {
                        parent.leftChild(newNode);
                        return;
                    }
                }
            }
        }
    }
}
...