Skip to content

Instantly share code, notes, and snippets.

@rubenhak
Last active December 30, 2022 05:46
Show Gist options
  • Save rubenhak/4317da24cbd1a34559d0f050a4f96b9d to your computer and use it in GitHub Desktop.
Save rubenhak/4317da24cbd1a34559d0f050a4f96b9d to your computer and use it in GitHub Desktop.

TypeScript Tree Traversal

  • Tree Node
  • traverseTreeInOrder
  • traverseTreePostOrder
  • traverseTreePreOrder
  • depthFirstSearch
function depthFirstSearch<T>(node : Node<T> | null, target: T) : Node<T> | null
{
if (!node) return null;
if (node.value === target)
return node;
const left = depthFirstSearch(node.left, target);
if (left != null)
return left;
const right = depthFirstSearch(node.right, target);
return right;
}
type NodeHandler<T> = (value: T, node: Node<T>) => void;
function traverseTreeInOrder<T>(node : Node<T> | null, handler: NodeHandler<T>)
{
if (node == null) {
return;
}
traverseTreeInOrder(node.left, handler);
handler(node.value, node);
traverseTreeInOrder(node.right, handler);
}
type NodeHandler<T> = (value: T, node: Node<T>) => void;
function traverseTreePostOrder<T>(node : Node<T> | null, handler: NodeHandler<T>)
{
if (node == null) {
return;
}
traverseTreeInOrder(node.left, handler);
traverseTreeInOrder(node.right, handler);
handler(node.value, node);
}
type NodeHandler<T> = (value: T, node: Node<T>) => void;
function traverseTreePreOrder<T>(node : Node<T> | null, handler: NodeHandler<T>) {
if (node == null) {
return;
}
handler(node.value, node);
traverseTreeInOrder(node.left, handler);
traverseTreeInOrder(node.right, handler);
}
class Node<T>
{
public value : T;
public left : Node<T> | null;
public right : Node<T> | null;
constructor(value : T, left : Node<T> | null, right : Node<T> | null) {
this.value = value;
this.left = left ?? null;
this.right = right ?? null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment