繁体   English   中英

二叉树添加一个未定义的节点

[英]binary tree add an undefined node

问题

我正在尝试更好地研究树理论,我可以毫无问题地添加一个或多个节点,但我注意到如果我尝试在不传递参数的情况下启动多个添加函数,它根本不起作用。 你能解释一下我的错误在哪里吗?

代码

BinarySearchTree.prototype.makeNode = function(value) {
    var node = {};
    node.value = value;
    node.left = null;
    node.right = null;
    return node;
};

BinarySearchTree.prototype.add = function(value) {
    var currentNode = this.makeNode(value);
    if (!this.root) {
        this.root = currentNode;
    } else {
        this.insert(currentNode);
    }

    return this;
};

BinarySearchTree.prototype.insert = function(currentNode) {
    var value = currentNode.value;
    var traverse = function(node) {
        if (value > node.value) {
            if (!node.right) {
                node.right = currentNode;
                return;
            } else traverse(node.right);
        } else if (value < node.value) {
            if (!node.left) {
                node.left = currentNode;
                return;
            } else traverse(node.left);
        }
    };
    traverse(this.root);
};

现在如果我尝试

var bst = new BinarySearchTree();
bst.add(3).add(2);
console.log(bst);

我会有这个console.log 在此处输入图片说明

如果我尝试传递一个未定义的值

var bst = new BinarySearchTree();
    bst.add().add(2);
    console.log(bst);

控制台日志

期待

我希望最后一个 console.log 不会丢失 2 的值。

. 我读了这篇文章是为了更好地理解如果我没有向函数传递任何值会怎样

如果我不在 Javascript 函数中传递参数会发生什么? 和其他帖子(如媒体和堆栈溢出)和与树理论相关的指南,但我没有找到任何解决方案

解决方案

感谢@Nina Scholz 的推荐和更正,我刚刚将此行添加到此功能中

BinarySearchTree.prototype.add = function(value) {
    if (typeof value == 'undefined') {
        value = null;
    }
    var currentNode = this.makeNode(value);
    if (!this.root) {
        this.root = currentNode;
        console.log('sei qui')
    } else {
        this.insert(currentNode);
    }

    return this;
};

什么也没有发生,因为两个条件都将undefined作为value评估为 false。

if (value > node.value) {
    // ...
} else if (value < node.value) {
    // ...
}

 function BinarySearchTree() {} BinarySearchTree.prototype.makeNode = function(value) { var node = {}; node.value = value; node.left = null; node.right = null; return node; }; BinarySearchTree.prototype.add = function(value) { var currentNode = this.makeNode(value); if (!this.root) { this.root = currentNode; } else { this.insert(currentNode); } return this; }; BinarySearchTree.prototype.insert = function(currentNode) { var value = currentNode.value; var traverse = function(node) { if (value > node.value) { if (!node.right) { node.right = currentNode; return; } else traverse(node.right); } else if (value < node.value) { if (!node.left) { node.left = currentNode; return; } else traverse(node.left); } }; traverse(this.root); }; var bst = new BinarySearchTree(); bst.add(3).add(2).add(); console.log(bst);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM