commit 3461fbd8543736a3352b47eb465653912c7720cb
parent f34e49736e9c0ea8dc644d8fefb926d489ff643a
Author: Plat <plat@stellar-nexus.ru>
Date: Thu, 23 Oct 2025 20:08:50 +0000
Attempt 2 to fix balancing
Diffstat:
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/final_solution.cpp b/final_solution.cpp
@@ -32,14 +32,14 @@ Node* search(Node*, int);
int main() {
- Node* root = init(67);
+ Node* root = nullptr;
int k = 1;
while (k > 0)
{
std::cin >> k;
- add(k, root);
- root = balance2(root);
+ if (k > 0)
+ root = add(root, k);
}
// value_node = search(root, 'int value from input'));
@@ -63,21 +63,20 @@ init(int val)
}
-void
+Node*
add(int val, Node* root)
{
- if (val < root->val) {
- if (!root->left)
- root->left = init(val);
- else
- add(val, root->left);
- }
- else {
- if (!root->right)
- root->right = init(val);
- else
- add(val, root->right);
- }
+ if (!root)
+ return init(val);
+
+ if (val < root->val)
+ root->left = add(root->left, val);
+ else if (val > root->val)
+ root->right = add(root->right, val);
+ else
+ return root;
+
+ return balance2(root)
}