我有一个js函数,我正在尝试实现二叉树。我有一个创建节点的函数,它是左边的,它是正确的子节点,就像这样
bst.prototype.cNode = function (x_) {
this.node = x_;
this.left = null;
this.right = null;
};
var a = new bst();
a.cNode(5);
这给了我第一个节点,它左右。
接下来我试图用当前节点值推送左/右子检查是否大于节点或更小节点如此
a.pushChild(2);
//
function bst(){
this.pushChild = function(w_){
if(w_ < this.node){
if(this.left == null){
this.left = new this.cNode(w_);
}
else{
this.pushChild(w_);
}
}
else if(w_ > this.node){
if(this.right == null){
this.right = new this.cNode(w_);
}
else{
}
}
}
}
它给了我Maximun堆栈错误,因为它在无限循环中被触发,因为它总是检查第一个this.node和this.left和this.right但是this.left和this.right也有this.node, ths.left,this.right我也想检查一下,不是第一个。
如何检查最新值而不是第一个节点,左,右值?
答案 0 :(得分:0)
您在第一个节点上反复调用该函数,而是根据需要在左侧或右侧节点上调用它:
this.pushChild = function(w_){
if(w_ < this.node){
if(this.left == null){
this.left = new this.cNode(w_);
}
else{
this.left.pushChild(w_);
}
}
else if(w_ > this.node){
if(this.right == null){
this.right = new this.cNode(w_);
}
else{
this.right.pushChild(w_);
}
}