Найти высоту узла в JavaScript - PullRequest
0 голосов
/ 18 декабря 2018

В моем коде JavaScript я пытаюсь найти высоту данного узла в Binary SearchTree. Вот мой код

class BinarySearchTree2 {
    constructor() {
        this.root = null;
    }

    findHeight(node = this.root,nodeData,level = 1) {
        let root = node;
        if(root === null) 
            return null;
        if(root.data === nodeData) 
            return level;
        let foundLevel = 0;
        if(nodeData < root.data) {
            foundLevel = findHeight(root.left,nodeData,level + 1);
        }
        // If you have found it on the left subtree, that's it, return
        if(foundLevel !== 0) 
            return foundLevel;
        foundLevel = findHeight(root.left,nodeData,level + 1);
        return foundLevel;

    }
}

Теперь, когда я вставляю несколько узлов и пытаюсь найти высотуузла типа:

let BST = new BinarySearchTree2();

BST.insert(8);
BST.insert(3);
BST.insert(10);
BST.insert(1);
BST.insert(6);
BST.insert(14);
BST.insert(4);
BST.insert(7);
BST.insert(13);

BST.findHeight(this.root,14,1); 

Выдает ошибку.Сказать findHeight не определено.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Если вы хотите вызвать метод внутри себя, вам все равно нужно использовать this, так как метод, который вы пытаетесь вызвать, фактически привязан к самому объекту.Итак,

class BinarySearchTree2 {
    constructor() {
        this.root = null;
    }

    findHeight(node = this.root,nodeData,level = 1) {
        let root = node;
        if(root === null) 
            return null;
        if(root.data === nodeData) 
            return level;
        let foundLevel = 0;
        if(nodeData < root.data) {
            // change here
            foundLevel = this.findHeight(root.left,nodeData,level + 1);
        }
        // If you have found it on the left subtree, that's it, return
        if(foundLevel !== 0) 
            return foundLevel;
        // change here
        foundLevel = this.findHeight(root.left,nodeData,level + 1);
        return foundLevel;

    }
}

будет работать как положено

0 голосов
/ 18 декабря 2018

Эта строка должна быть

findHeight(node = this.root,nodeData,level = 1) {

Вот так

findHeight = (node = this.root,nodeData,level = 1) => {

Или вам нужно привязать свою функцию к классам в конструкторе.

...