Skip to content

Instantly share code, notes, and snippets.

View AlexeiDarmin's full-sized avatar
👋
software developer and simulation tinkerer

Alexei Darmin AlexeiDarmin

👋
software developer and simulation tinkerer
View GitHub Profile
@AlexeiDarmin
AlexeiDarmin / listOfDepths.ts
Created November 18, 2018 00:31
Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth.
/*
List of depths: Given a binary tree, design an algorithm which creates a linked list of all the nodes
at each depth (eg if you have a tree with depth D, you'll have D linked lists.)
*/
interface DepthQueue<T> {
depth: number,
node: T
}
@AlexeiDarmin
AlexeiDarmin / isBalanced.ts
Created November 18, 2018 18:29
Check if a binary tree is balanced, the heights of two subtrees may never differ by more than one
/*
Check balanced: Implement a function to check if a binary tree is balanced. For the purposes of
this question, a balanced tree is defined to be a tree such that the heights of the two subtrees of any
node never differ by more than one.
*/
// const myTree = buildTree([1,2,3,4,5,6,7,8, 9, 10, 11, 12, 13, 14])
const myTree = new BinaryNode(1)
myTree.rightChild = new BinaryNode(2)
myTree.rightChild.rightChild = new BinaryNode(3)
@AlexeiDarmin
AlexeiDarmin / validateBST.ts
Created November 18, 2018 18:40
Implement a function to validate that a binary tree is a binary search tree.
// Valiate binary tree: Implement a function to validate that a binary tree is a binary search tree.
function validateBST<T>(node: BinaryNode<T>) {
if (!node) return true
if (node.leftChild && node.leftChild.data > node.data) return false
if (node.rightChild && node.rightChild.data < node.data) return false
return validateBST(node.leftChild) && validateBST(node.rightChild)
}
@AlexeiDarmin
AlexeiDarmin / denormalizeNodes.ts
Last active December 4, 2018 00:49
denormalize a list of nodes.
/*
Developer notes:
Written in Typescript.
I chose to use an iterative approach because it's able to handle more data than a recursive approach
before hitting a stackoverfow error.
This algorithm runs in O(N) time and O(N) space, while avoiding cycles without actively searching for them.
Actively checking for cycles would make the time compexity O(NlogN).