author | Rodrigo Campos
<rodrigo@sdfg.com.ar> 2011-04-10 06:10:29 UTC |
committer | Rodrigo Campos
<rodrigo@sdfg.com.ar> 2011-04-10 06:10:29 UTC |
parent | 4a64f65b0db7f00cfe20930f8fabc6df4126a2e7 |
bintree.asm | +14 | -15 |
diff --git a/bintree.asm b/bintree.asm index eaa9a1b..301a51e 100644 --- a/bintree.asm +++ b/bintree.asm @@ -10,10 +10,6 @@ extern malloc, free -section .data -msg: db 'hola', 0 - - section .text global insertar, eliminar, destruirArbol, imprimir @@ -156,18 +152,20 @@ eliminar: je .fin ; pusheo los registros usados que no se protegen por la C calling convention - ; XX: si bien uso cx, pusheo ecx porque sino el push pushea solo dos bytes y desalinea la pila + ; XX: si bien uso cx, pusheo ecx porque sino el push pushea solo dos + ; bytes y desalinea la pila push ecx ; pusheo los parametros push ecx push dword .raiz call buscar_por_id add esp, 8 - ; como pushe ecx por el tema de la alineacion, pop ecx. Pero solo me interesa lo de cx + ; como pushe ecx (por el tema de la alineacion) pop ecx. Pero solo me + ; interesa lo de cx pop ecx - ; en eax nos quedamos con el puntero al nodo si existe, 0 si no existe - ; Si no esta el nodo, no tenemos nada para hacer tampoco + ; En eax queda el puntero al nodo si existe, 0 si no existe + ; Si no esta el nodo, no tenemos nada para eliminar cmp eax, 0 je .fin @@ -225,7 +223,7 @@ eliminar: push edx push edi - ; nos llamamos recursivamente + ; nos llamamos recursivamente con el *minimo* del subarbol *derecho* push ecx ; id push ebx ; nodo **arbol call eliminar @@ -342,6 +340,8 @@ eliminar_0_hijos: ret ; void eliminar_1_hijo(nodo **raiz, nodo *nodo, nodo *padre); +; Elimina nodo asumiendo que tiene un solo hijo. Si padre == NULL entonces el +; nodo a borrar es la raiz eliminar_1_hijo: push ebp mov ebp, esp @@ -384,15 +384,13 @@ eliminar_1_hijo: mov .pDer, ecx jmp .fin - - jmp .fin - .borrarRaiz: - ; Tengo que eliminar la raiz, y esta tiene un hijo. Asique el hijo va a ser la raiz ahora - + ; Tengo que eliminar la raiz, y esta tiene un hijo. Asique el hijo va a + ; ser la raiz ahora + ; pongo mi hijo (izq o derecho, el que sea) como raiz mov ecx, .nIzq - add ecx, .nDer ; XXX: este add funciona siempre bien, no ? + add ecx, .nDer mov [eax], ecx ; hago el free y termino @@ -469,6 +467,7 @@ destruirArbol: pop ebp ret +; void imprimir(nodo *arbol, char *archivo); imprimir: push ebp mov ebp, esp