0

我正在Binary Search Tree用 Javascript 实现一个简单的方法,但我无法理解 Javascript OOP 的做事方式。
在我的insertHelper方法中,我为 root 分配了一个新的BinaryNode但在函数返回后,它仍然null是我this在方法中显式使用的指针insert。那么有人可以帮我解释一下吗?

function BinaryNode(key, value, left, right) {
    this.key = key;
    this.value = value;
    this.left = left;
    this.right = right;
}

function BinarySearchTree() {
    this.root = null;
}

BinarySearchTree.prototype.insertHelper = function (root, key, value) {
    if (root === null) {
        root = new BinaryNode(key, value, null, null);
    }
}

BinarySearchTree.prototype.insert = function (key, value) {
    this.insertHelper(this.root, key, value);
    if (this.root === null) {
        console.log("root is NULL!");
    }
};

var bst = new BinarySearchTree();
console.log(typeof bst);
console.log(typeof bst.root);
bst.insert(1, 1);
4

2 回答 2

3

试试:

改变:

BinarySearchTree.prototype.insertHelper = function (root, key, value) {
    if (root === null) {
        root = new BinaryNode(key, value, null, null);
    }
}

至:

BinarySearchTree.prototype.insertHelper = function (root, key, value) {
    if (root === null) {
        //change root to this.root
        this.root = new BinaryNode(key, value, null, null);
    }
}

当你传递变量“this.root”时,在insertHelper的主体中,变量“root”只是被视为局部变量,所以“this.root”没有改变,仍然是“null”。

于 2013-11-11T03:07:59.957 回答
2

关闭,this.root存在undefined是您必须明确处理的特殊情况。我会让你弄清楚insertHelper现在如何完成实施。

你这样做的问题是你重新分配了一个范围变量,而你需要重新分配this对象上的变量。

BinarySearchTree.prototype.insert = function (key, value) {
    if (this.root == null) {
        this.root = new BinaryNode(key, value);
    } else {
        this.insertHelper(this.root, key, value);
    }
};
于 2013-11-11T02:28:46.727 回答