R
E
A
C
T
O

xamples
epeat
ode
pproach
ptimize
est
{Binary Tree Inversion}

The Question
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.

Example
4
2
7
1
3
6
9
4
7
2
9
6
3
1
Invert this tree
Into this tree

Example
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 ]

Write `BinarySearchTree` function
function BinarySearchTree(value){
return {
value: value,
left: undefined,
right: undefined
}
}

Write `insert` function
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);
}
}
};

Write `breadthFirstTraversal` function
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);
}
}
};

Write `inverse` function
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);
}
};
Binary Tree Inversion
By beelai88
Binary Tree Inversion
Technical interview problem to invert a binary tree about its y-axis
- 934