// Copy the child key to the parent until a leaf is // found and remove the leaf. This is done with the // left subtree public boolean RemoveLeft(Tree p_node, Tree c_node) { boolean ntb; while (c_node.GetHas_Left()) { // auxtree01 = c_node.GetLeft() ; // auxint02 = auxtree01.GetKey(); // ntb = c_node.SetKey(auxint02); ntb = c_node.SetKey((c_node.GetLeft()).GetKey()); p_node = c_node; c_node = c_node.GetLeft(); } ntb = p_node.SetLeft(my_null); ntb = p_node.SetHas_Left(false); return true; }
// Insert a new element in the tree public boolean Insert(int v_key) { Tree new_node; boolean ntb; boolean cont; int key_aux; Tree current_node; new_node = new Tree(); ntb = new_node.Init(v_key); current_node = this; cont = true; while (cont) { key_aux = current_node.GetKey(); if (v_key < key_aux) { if (current_node.GetHas_Left()) current_node = current_node.GetLeft(); else { cont = false; ntb = current_node.SetHas_Left(true); ntb = current_node.SetLeft(new_node); } } else { if (current_node.GetHas_Right()) current_node = current_node.GetRight(); else { cont = false; ntb = current_node.SetHas_Right(true); ntb = current_node.SetRight(new_node); } } } return true; }
// Print the elements of the tree public boolean RecPrint(Tree node) { boolean ntb; if (node.GetHas_Left()) { // auxtree01 = node.GetLeft() ; // ntb = this.RecPrint(auxtree01); ntb = this.RecPrint(node.GetLeft()); } else ntb = true; System.out.println(node.GetKey()); if (node.GetHas_Right()) { // auxtree01 = node.GetRight() ; // ntb = this.RecPrint(auxtree01); ntb = this.RecPrint(node.GetRight()); } else ntb = true; return true; }
// Check if the element to be removed will use the // righ or left subtree if one exists public boolean Remove(Tree p_node, Tree c_node) { boolean ntb; int auxkey1; int auxkey2; if (c_node.GetHas_Left()) ntb = this.RemoveLeft(p_node, c_node); else if (c_node.GetHas_Right()) ntb = this.RemoveRight(p_node, c_node); else { auxkey1 = c_node.GetKey(); // auxtree01 = p_node.GetLeft() ; // auxkey2 = auxtree01.GetKey() ; auxkey2 = (p_node.GetLeft()).GetKey(); if (this.Compare(auxkey1, auxkey2)) { ntb = p_node.SetLeft(my_null); ntb = p_node.SetHas_Left(false); } else { ntb = p_node.SetRight(my_null); ntb = p_node.SetHas_Right(false); } } return true; }
// Delete an element from the tree public boolean Delete(int v_key) { Tree current_node; Tree parent_node; boolean cont; boolean found; boolean is_root; int key_aux; boolean ntb; current_node = this; parent_node = this; cont = true; found = false; is_root = true; while (cont) { key_aux = current_node.GetKey(); if (v_key < key_aux) if (current_node.GetHas_Left()) { parent_node = current_node; current_node = current_node.GetLeft(); } else cont = false; else if (key_aux < v_key) if (current_node.GetHas_Right()) { parent_node = current_node; current_node = current_node.GetRight(); } else cont = false; else { if (is_root) if ((!current_node.GetHas_Right()) && (!current_node.GetHas_Left())) ntb = true; else ntb = this.Remove(parent_node, current_node); else ntb = this.Remove(parent_node, current_node); found = true; cont = false; } is_root = false; } return found; }
// Search for an elemnt in the tree public int Search(int v_key) { boolean cont; int ifound; Tree current_node; int key_aux; current_node = this; cont = true; ifound = 0; while (cont) { key_aux = current_node.GetKey(); if (v_key < key_aux) if (current_node.GetHas_Left()) current_node = current_node.GetLeft(); else cont = false; else if (key_aux < v_key) if (current_node.GetHas_Right()) current_node = current_node.GetRight(); else cont = false; else { ifound = 1; cont = false; } } return ifound; }