BinaryTree* deleteNode(int val, BinaryTree *tree) { if(haveNode(val,tree))//condition : le noeud est présent { switch(numberOfLeaf(tree,val)){//test du nombre de fils et appel de la fonction adequate case 0: return deleteLeaf(val,tree); break; case 1: return deleteNode1(val,tree); break; case 2: return deleteNode2(val,tree); break; default: return tree; break; } } else { return tree; } }
void GraphState::deleteNode () { GSEdge &gsedge = nodes.back ().edges[0]; int from = gsedge.tonode; nodes[from].edges.pop_back (); deleteNode2 (); edgessize--; }
BinaryTree* deleteNode2(int val, BinaryTree *tree) { BinaryTree *res=NULL; res = malloc(sizeof(BinaryTree)); if(haveNode(val,tree))//condition : le noeud est present { if(nodeValue(tree)==val)// on se deplace dans le branches de l'arbre { // on supprime le noeud val dans l'arbre ou a été échangé val et le noeud de valeur maximale dans le sous arbre gauche res=deleteNode1(val,switchNode(val,maxNode(leftChild(tree)),tree)); } else// appel recursif { res=createNodeWithChilds(deleteNode2(val,leftChild(tree)),nodeValue(tree),deleteNode2(val,rightChild(tree))); } } else { res=tree; } return res; }
void GraphState::deleteStartNode () { deleteNode2 (); }