Skip to content

Commit 0f28f83

Browse files
committed
Refactor bst recursion
1 parent 67a4484 commit 0f28f83

File tree

1 file changed

+26
-30
lines changed

1 file changed

+26
-30
lines changed

data_structures/non_linear/trees/binary_trees/binary_search_tree.dart

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,30 @@ class BinarySearchTree {
2424
/// - If there is, move to that node and repeat these steps.
2525
/// - If there is not, add that node as the left property.
2626
BinarySearchTree? insert(num value) {
27-
final newNode = Node(value);
28-
final currentRoot = root;
29-
30-
if (currentRoot == null) {
31-
root = newNode;
32-
return this;
27+
if (root case final root?) {
28+
return _insertRecursive(value, root);
3329
}
30+
root = Node(value);
31+
return this;
32+
}
3433

35-
BinarySearchTree? insertHelper(Node<num> node) {
36-
if (value < node.value) {
37-
if (node.left == null) {
38-
node.left = newNode;
39-
return this;
40-
}
41-
return insertHelper(node.left!);
34+
BinarySearchTree? _insertRecursive(num value, Node<num> node) {
35+
if (value < node.value) {
36+
if (node.left == null) {
37+
node.left = Node(value);
38+
return this;
4239
}
43-
if (value > node.value) {
44-
if (node.right == null) {
45-
node.right = newNode;
46-
return this;
47-
}
48-
return insertHelper(node.right!);
40+
return _insertRecursive(value, node.left!);
41+
}
42+
if (value > node.value) {
43+
if (node.right == null) {
44+
node.right = Node(value);
45+
return this;
4946
}
50-
//value == node.value (value already there)
51-
return null;
47+
return _insertRecursive(value, node.right!);
5248
}
53-
54-
return insertHelper(currentRoot);
49+
//value == node.value (value already there)
50+
return null;
5551
}
5652

5753
/// Pseudocode (Iteratively or Recursively):
@@ -67,14 +63,14 @@ class BinarySearchTree {
6763
/// - If there is, move to that node and repeat these steps.
6864
/// - If there is not, we're done searching.
6965
bool find(num value) {
70-
bool findHelper(Node<num>? node) {
71-
if (node == null) return false;
72-
if (value < node.value) return findHelper(node.left);
73-
if (value > node.value) return findHelper(node.right);
74-
return true; //value == node.value (value has found)
75-
}
66+
return _findRecursive(value, root);
67+
}
7668

77-
return findHelper(root);
69+
bool _findRecursive(num value, Node<num>? node) {
70+
if (node == null) return false;
71+
if (value < node.value) return _findRecursive(value, node.left);
72+
if (value > node.value) return _findRecursive(value, node.right);
73+
return true; //value == node.value (value has found)
7874
}
7975
}
8076

0 commit comments

Comments
 (0)