xamples
epeat
ode
pproach
ptimize
est
Invert a binary tree about its y-axis.
This problem was inspired by this original tweet by Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f**k off.
4
2
7
1
3
6
9
4
7
2
9
6
3
1
Invert this tree
Into this tree
var tree = BinarySearchTree(20)
insert(tree, 15);
insert(tree, 25);
insert(tree, 5);
insert(tree, 17);
insert(tree, 21);
insert(tree, 28);
insert(tree, 0);
insert(tree, 14);
insert(tree, 50);
insert(tree, 1);
var depthBefore = [];
breadthFirstTraversal(tree, function(val){depthBefore.push(val);});
console.log(depthBefore) // [ 20, 15, 25, 5, 17, 21, 28, 0, 14, 50, 1 ]
inverse(tree);
var depthAfter = [];
breadthFirstTraversal(tree, function(val){depthAfter.push(val);});
console.log(depthAfter) // [ 20, 25, 15, 28, 21, 17, 5, 50, 14, 0, 1 ]
function BinarySearchTree(value){
return {
value: value,
left: undefined,
right: undefined
}
}
var insert = function (tree, value){
if(tree.value > value){
if (tree.left) {
insert(tree.left, value)
} else {
tree.left = BinarySearchTree(value);
}
} else if(tree.value <= value){
if (tree.right) {
insert(tree.right, value)
} else {
tree.right = BinarySearchTree(value);
}
}
};
var breadthFirstTraversal = function(tree, cbFunc){
var queue = [tree];
while (queue.length) {
var currentNode = queue.shift();
cbFunc(currentNode.value);
if(currentNode.left) {
queue.push(currentNode.left);
}
if(currentNode.right) {
queue.push(currentNode.right);
}
}
};
var inverse = function(tree){
var temp = tree.left;
tree.left = tree.right;
tree.right = temp;
if(tree.left) {
inverse(tree.left);
}
if(tree.right) {
inverse(tree.right);
}
};