私のバイナリツリーから最小値を取得しようとしていますが、最大呼び出しスタックサイズを超えたというエラーが発生しています。バイナリ検索ツリーの項目の最小値を正しく取得するにはどうすればよいですか?ここでツリーをたどるときにコールスタックの最大サイズを超えるのはなぜですか?
はで私のコードです:
function Node(val){
this.value = val;
this.left = null;
this.right = null;
}
function BinarySearchTree(){
this.root = null;
}
BinarySearchTree.prototype.minNode =function() {
var node = this.root;
if(!node){
return 0;
}
if(node.left){
return this.minNode(node.left)
}
return node.value
}
BinarySearchTree.prototype.push = function(val){
var root = this.root;
if(!root){
this.root = new Node(val);
return;
}
var currentNode = root;
var newNode = new Node(val);
while(currentNode){
if(val < currentNode.value){
if(!currentNode.left){
currentNode.left = newNode;
break;
}
else{
currentNode = currentNode.left;
}
}
else{
if(!currentNode.right){
currentNode.right = newNode;
break;
}
else{
currentNode = currentNode.right;
}
}
}
}
var bt = new BinarySearchTree();
bt.push(23);
bt.push(1);
bt.push(2);
bt.push(25);
console.log(bt.minNode());
あなたは 'node'を進めていません。あなたはすべての再帰でルートに設定します。 – Li357
は最新ではありませんか?何が正しい方法ですか.t最小値を得る – user5711656
再帰的メソッドのパラメータとして渡すか、インスタンスに '.currentSearchNode'プロパティを保持し、' this.root'の代わりにそれを使用する必要がありますsoあなたはどこにいるのかを把握することができます。これは*意味*のデータセットに対してスタックを簡単にオーバーフローさせることができることに注意してください。直接の再帰を処理するには、JavaScriptは優れていません。代わりに、いつでもトランポリン・サンクをすることができます。 –