summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanto Cariotti <sancn@live.com>2017-11-10 08:28:47 +0100
committerSanto Cariotti <sancn@live.com>2017-11-10 08:28:47 +0100
commit6dbfe789e8f92d4519599151bf56ea70ecfb178b (patch)
tree50560a0be199240680d404b55936cc01f79b352a
parente8f63b8e3ac794007d7a8d6d75e9f65917f760e0 (diff)
fixed delete node
-rw-r--r--cpp/bst.cc26
1 files changed, 13 insertions, 13 deletions
diff --git a/cpp/bst.cc b/cpp/bst.cc
index bc9efaf..7b0889b 100644
--- a/cpp/bst.cc
+++ b/cpp/bst.cc
@@ -34,25 +34,25 @@ private:
}
Node* remove(Node* root, int data) {
- if(root->data > data) root->left = remove(root->left, data);
+ if(root == nullptr) return root;
+ else if(root->data > data) root->left = remove(root->left, data);
else if(root->data < data) root->right = remove(root->right, data);
else {
+ Node* tmp = root;
if(root->right == nullptr && root->left == nullptr) {
delete root;
root = nullptr;
} else if(root->right == nullptr) {
- Node* tmp = root->left;
- delete root;
- return tmp;
+ root = root->left;
+ delete tmp;
} else if(root->left == nullptr) {
- Node* tmp = root->right;
- delete root;
- return tmp;
+ root = root->right;
+ delete tmp;
+ } else {
+ tmp = min(root->right);
+ root->data = tmp->data;
+ root->right = remove(root->right, tmp->data);
}
-
- Node* tmp = min(root->right);
- root->data = tmp->data;
- root->right = remove(root->right, tmp->data);
}
return root;
@@ -88,8 +88,8 @@ public:
int main() {
BST* bst = new BST();
-
- for(int i = 0; i < 9; i++) {
+ int n; cin >> n;
+ for(int i = 0; i < n; i++) {
int zz;
std::cin >> zz;
bst->add(zz);