Skip to content

Commit abbbf61

Browse files
committed
Improve logic to avoid extra comparison
1 parent 666b6c3 commit abbbf61

File tree

1 file changed

+7
-18
lines changed

1 file changed

+7
-18
lines changed

data_structures/binary_search_tree.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -348,31 +348,20 @@ export class BinarySearchTree<T> implements Iterable<T> {
348348
const order = this.#compare(value, node.value);
349349
if (order === 0 && returnIfFound) return node;
350350

351-
if (select === "higher" && order < 0) {
352-
if (result === null) {
353-
result = node;
354-
continue;
355-
}
356-
357-
const nodeOrder = this.#compare(node.value, result.value);
358-
if (nodeOrder < 0) result = node;
359-
} else if (select === "lower" && order > 0) {
360-
if (result === null) {
361-
result = node;
362-
continue;
363-
}
364-
365-
const nodeOrder = this.#compare(node.value, result.value);
366-
if (nodeOrder > 0) result = node;
367-
}
368-
369351
let direction: Direction = order < 0 ? "left" : "right";
370352
if (select === "higher" && order === 0) {
371353
direction = "right";
372354
} else if (select === "lower" && order === 0) {
373355
direction = "left";
374356
}
375357

358+
if (
359+
(select === "higher" && direction === "left") ||
360+
(select === "lower" && direction === "right")
361+
) {
362+
result = node;
363+
}
364+
376365
node = node[direction];
377366
}
378367
return result;

0 commit comments

Comments
 (0)