Skip to content

Commit

Permalink
remove recursion in avl trees (#710)
Browse files Browse the repository at this point in the history
Signed-off-by: bortolotti.dev <29543986+bortolottidev@users.noreply.github.com>
  • Loading branch information
bortolottidev committed May 1, 2024
1 parent 454db35 commit f6a9537
Showing 1 changed file with 20 additions and 16 deletions.
36 changes: 20 additions & 16 deletions packages/orama/src/trees/avl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,50 +122,54 @@ export function rangeSearch<K, V>(node: RootNode<K, V>, min: K, max: K): V {
export function greaterThan<K, V>(node: RootNode<K, V>, key: K, inclusive = false): V {
const result: V[] = []

function traverse(node: Node<K, V>) {
if (node === null) {
return
if (node === null) return result as V;

const stack: Array<Nullable<Node<K, V>>> = [node.root]

while (stack.length > 0) {
const node = stack.pop()
if (!node) {
continue;
}

if (inclusive && node.k >= key) {
safeArrayPush(result, node.v as V[])
}

if (!inclusive && node.k > key) {
safeArrayPush(result, node.v as V[])
}

traverse(node.l as Node<K, V>)
traverse(node.r as Node<K, V>)
stack.push(node.r)
stack.push(node.l)
}

traverse(node.root)

return result as V
}

export function lessThan<K, V>(node: RootNode<K, V>, key: K, inclusive = false): V {
const result: V[] = []

function traverse(node: Node<K, V>) {
if (node === null) {
return
if (node === null) return result as V;

const stack: Array<Nullable<Node<K, V>>> = [node.root]

while (stack.length > 0) {
const node = stack.pop()
if (!node) {
continue;
}

if (inclusive && node.k <= key) {
safeArrayPush(result, node.v as V[])
}

if (!inclusive && node.k < key) {
safeArrayPush(result, node.v as V[])
}

traverse(node.l as Node<K, V>)
traverse(node.r as Node<K, V>)
stack.push(node.r)
stack.push(node.l)
}

traverse(node.root)

return result as V
}

Expand Down

0 comments on commit f6a9537

Please sign in to comment.