diff options
| author | Thomas Schmucker <ts@its1.de> | 2020-08-05 13:42:02 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2020-08-05 13:42:02 +0200 |
| commit | eab54cfd87cb323c19bda5960d3150afbd4dd546 (patch) | |
| tree | 2b4a409f028cf5b34de0ac488053db4c1e67692e | |
| parent | c42cc885f355ef986843cf74c474bfb793e3f0d8 (diff) | |
| download | data-structures-eab54cfd87cb323c19bda5960d3150afbd4dd546.tar.gz data-structures-eab54cfd87cb323c19bda5960d3150afbd4dd546.tar.bz2 data-structures-eab54cfd87cb323c19bda5960d3150afbd4dd546.zip | |
+ Fix: handle collision
| -rw-r--r-- | tree.c | 32 |
1 files changed, 16 insertions, 16 deletions
| @@ -132,27 +132,27 @@ tree_remove(struct tree_node *tree, T key) | |||
| 132 | tree->left = tree_remove(tree->left, key); | 132 | tree->left = tree_remove(tree->left, key); |
| 133 | else if ( key > tree->key ) | 133 | else if ( key > tree->key ) |
| 134 | tree->right = tree_remove(tree->right, key); | 134 | tree->right = tree_remove(tree->right, key); |
| 135 | else { /* key == tree->key */ | 135 | else { /* key == tree->key */ |
| 136 | /* TODO: Handle Collision */ | 136 | if ( --tree->count == 0 ) { /* Handle Collision */ |
| 137 | struct tree_node *temp = tree; | ||
| 137 | 138 | ||
| 138 | struct tree_node *temp = tree; | 139 | if ( tree->left == NULL ) { |
| 140 | tree = tree->right; | ||
| 141 | } | ||
| 142 | else if ( tree->right == NULL ) { | ||
| 143 | tree = tree->left; | ||
| 144 | } | ||
| 145 | else { | ||
| 146 | struct tree_node *min = tree_detach_min(&tree->right); | ||
| 139 | 147 | ||
| 140 | if ( tree->left == NULL ) { | 148 | min->left = tree->left; |
| 141 | tree = tree->right; | 149 | min->right = tree->right; |
| 142 | } | ||
| 143 | else if ( tree->right == NULL ) { | ||
| 144 | tree = tree->left; | ||
| 145 | } | ||
| 146 | else { | ||
| 147 | struct tree_node *min = tree_detach_min(&tree->right); | ||
| 148 | 150 | ||
| 149 | min->left = tree->left; | 151 | tree = min; |
| 150 | min->right = tree->right; | 152 | } |
| 151 | 153 | ||
| 152 | tree = min; | 154 | free(temp); |
| 153 | } | 155 | } |
| 154 | |||
| 155 | free(temp); | ||
| 156 | } | 156 | } |
| 157 | return tree; | 157 | return tree; |
| 158 | } | 158 | } |
