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