tree_remove working
This commit is contained in:
		
							parent
							
								
									97571769a3
								
							
						
					
					
						commit
						ee38dceea2
					
				
					 1 changed files with 38 additions and 4 deletions
				
			
		
							
								
								
									
										42
									
								
								src/tree.c
									
										
									
									
									
								
							
							
						
						
									
										42
									
								
								src/tree.c
									
										
									
									
									
								
							|  | @ -58,11 +58,45 @@ bool tree_contains(Node *node, int data) { | |||
| } | ||||
| 
 | ||||
| int tree_remove(Node **node, int data) { | ||||
|   if (node == NULL) | ||||
|     return false; | ||||
|   // TODO
 | ||||
|   if (*node == NULL) | ||||
|     return 0; | ||||
| 
 | ||||
|   return 0; | ||||
|   if ((*node)->data == data) { | ||||
|     // If the node has no children
 | ||||
|     if ((*node)->left == NULL && (*node)->right == NULL) { | ||||
|       free(*node); | ||||
|       *node = NULL; | ||||
|       return 0; | ||||
|     } | ||||
| 
 | ||||
|     // If the node has one child
 | ||||
|     if ((*node)->left == NULL) { | ||||
|       Node *temp = *node; | ||||
|       *node = (*node)->right; | ||||
|       free(temp); | ||||
|       return 0; | ||||
|     } | ||||
| 
 | ||||
|     if ((*node)->right == NULL) { | ||||
|       Node *temp = *node; | ||||
|       *node = (*node)->left; | ||||
|       free(temp); | ||||
|       return 0; | ||||
|     } | ||||
| 
 | ||||
|     // If the node has two children
 | ||||
|     Node *temp = (*node)->right; | ||||
|     while (temp->left != NULL) | ||||
|       temp = temp->left; | ||||
| 
 | ||||
|     (*node)->data = temp->data; | ||||
|     return tree_remove(&(*node)->right, temp->data); | ||||
|   } | ||||
| 
 | ||||
|   if ((*node)->data < data) | ||||
|     return tree_remove(&(*node)->right, data); | ||||
| 
 | ||||
|   return tree_remove(&(*node)->left, data); | ||||
| } | ||||
| 
 | ||||
| void tree_clear(Tree *tree) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus