Types are nice, infinite recursion edition
Playing around on hackerrank to prepare for an interview, I had some fun solving tree problems using recursion.
RangeError: Maximum call stack size exceededCan you spot what's wrong here?
/*
Node is defined as
var Node = function(data) {
this.data = data;
this.left = null;
this.right = null;
}
*/
function treeHeight(root) {
if (!root) { return 0 }
return 1 + Math.max(treeHeight(root.left), treeHeight(root).right)
}
Absolutely, yes, line 12:
return 1 + Math.max(treeHeight(root.left), treeHeight(root).right)A misplaced parenthesis, meaning this recursive function has no exit condition. Instead of calling itself with both root.left and root.right, it will call itself with root.leftand root, the input parameter. Until it blows the stack.
And since a number has no right property, proper typing would have easily avoided that.
¯\_(ツ)_/¯
function treeHeight(root) {
if (!root) { return 0 }
return 1 + Math.max(treeHeight(root.left), treeHeight(root.right))
}Without typo
Comments ()