I believe I am using 'this' incorrectly? I am unsure of how to proceed. Here are the methods I am using.
function BinarySearchTree(value) {
this.value = value;
this.right = null;
this.left = null;
}
BinarySearchTree.prototype.add = function(value) {
node = this;
if (value < this.value) {
if (this.left) this.left.add(value);
else this.left = new BinarySearchTree(value);
}
if (value > this.value) {
if (this.right) this.right.add(value);
else this.right = new BinarySearchTree(value);
}
}
BinarySearchTree.prototype.leftHeight = function(root = this.value) {
if (this.value == null) {
return 0;
}
let queue = [];
queue.push(this);
let leftHeight = 0;
while (1 == 1) {
let nodeCount = queue.length;
if (nodeCount == 0) {
return leftHeight - 1;
}
leftHeight ;
while (nodeCount > 0) {
let newNode = queue.shift();
if (newNode.left != null) {
queue.push(newNode.left);
}
nodeCount--;
}
}
}
BinarySearchTree.prototype.rightHeight = function(root = this.value) {
if (this.value == null) {
return 0;
}
let queue = [];
queue.push(this);
let rightHeight = 0;
while (1 == 1) {
let nodeCount = queue.length;
if (nodeCount == 0) {
return rightHeight - 1;
}
rightHeight ;
while (nodeCount > 0) {
let newNode = queue.shift();
if (newNode.right != null) {
queue.push(newNode.right);
}
nodeCount--;
}
}
}
BinarySearchTree.prototype.balanceFactor = function(this) {
console.log(this.leftHeight)
return this.leftHeight - this.rightHeight;
}
And here is the input and tests I am running...
let binarySearchTree = new BinarySearchTree;
binarySearchTree = new BinarySearchTree(5);
binarySearchTree.left = new BinarySearchTree(2)
binarySearchTree.right = new BinarySearchTree(3);
binarySearchTree.right.right = new BinarySearchTree(1);
console.log(binarySearchTree.rightHeight());
console.log(binarySearchTree.leftHeight());
console.log(binarySearchTree.balanceFactor())
The last 3 console logs output 2, 1, and NaN. So my left and right height methods are working correctly! Can anyone tell me why my 'balanceFactor' method isn't working?
Thanks and happy holidays!
CodePudding user response:
leftHeight
and rightHeight
are functions so you need to call them like this
BinarySearchTree.prototype.balanceFactor = function () {
console.log(this.leftHeight())
return this.leftHeight() - this.rightHeight();
}