Skip to content

Instantly share code, notes, and snippets.

View siavashk's full-sized avatar

Siavash Khallaghi siavashk

View GitHub Profile
@siavashk
siavashk / dijkstra.py
Created February 23, 2025 21:18
dijkstra
import heapq
def dijkstra(graph, start):
pq = [(0, start)]
heapq.heapify(pq)
dist = {node: float('inf') for node in graph}
dist[start] = 0
prev = {node: None for node in graph}
@siavashk
siavashk / topological_sort.py
Last active December 22, 2024 23:18
Topological Sort
from collections import deque
from typing import Dict, List
def topological_sort_dfs(nodes: List[int], edges: Dict[int, List[int]]):
visited = set()
stack = []
on_path = set() # To detect cycles
def dfs(node):
@siavashk
siavashk / trie.py
Created December 2, 2024 23:30
Trie
class TrieNode:
def __init__(self):
self.children = {}
self.is_end_of_word = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
@siavashk
siavashk / disjoint_set_implementation.py
Created December 2, 2024 23:26
Disjoint Set Implementation
class UnionFind:
def __init__(self):
self.parent = {}
self.rank = {}
def add(self, x):
"""
Adds a new element to the Union-Find structure.
Initializes the element as its own parent (singleton set).
"""
@siavashk
siavashk / bfs_iterative_binary_tree_traversal.py
Created December 1, 2024 01:19
BFS Iterative Binary Tree Traversal
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
from collections import deque
@siavashk
siavashk / dfs_iterative_binary_tree_traversal.py
Last active December 1, 2024 22:40
DFS Iterative Binary Tree Traversal
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
def iterative_pre_order_traversal(root: TreeNode):
stack = [root]
while stack:
@siavashk
siavashk / dfs_recursive_binary_tree_traversal.py
Last active November 30, 2024 21:19
DFS Recursive Binary Tree Traversal
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
def recursive_inorder_traversal(root: TreeNode):
if not root:
return