Usunięcie korzenia z drzewa

0

Witam, mam problem z usunięciem korzenia z drzewa bst, gdy jest on jedynym elementem, po wywołaniu funkcji a następnie wyświetleniu drzewa, wartość korzenia nadal się wyświetla

 void usun_ele(struct BST *root,int u){
	root=znajdz(root,u);
if(root->left==NULL && root->right==NULL)
	{
	if(root->parent==NULL)
	{
		root=NULL;                               //tutaj chyba jest bląd
	}
	else if(root->parent->left==root)
	{
		root->parent->left=NULL;
	}
	else
	{
		root->parent->right=NULL;
	}
	free (root);
} 

z góry dzięki za pomoc

5
void zmien_x(int x)
{
	x = 0;
}
int x = 42;
zmien_x(x);

Zrobiłeś to samo, tylko zamiast int masz BST*

0

mam problem z tymi wskaźnikami, program już mi działa ale nie wiem czy dobrze rozumiem sposób działania. Przekazujemy adres wskaźnika "root" po to żeby działać na oryginale ? Przy kolejnych węzłach drzewa mogę już działać tak jakby na kopiach ?

 void usun_ele(struct BST **root,int u){
	struct BST *wezel=znajdz((*root),u);
	if(wezel==NULL){
		printf("brak elementu");
		return;
	}
	else if(wezel->left==NULL && wezel->right==NULL)
	{
	if(wezel->parent==NULL)	{
		(*root)=NULL;
		free(*root);
		}
	else if(wezel->parent->left==wezel)
		wezel->parent->left=NULL;
	else
		wezel->parent->right=NULL;
	free(wezel);
	}

} 
0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Nie używaj innego niż angielskie nazewnictwa: http://4programmers.net/Forum/1208091
  3. Przy usunięciu innych węzłów niż korzeń adres samego korzenia się nie zmienia. Nie miałbyś problemu przy porządnej organizacji drzewa, mylisz drzewo z elementem drzewa. Powinno być:
typedef struct BSTnode { struct BSTnode *parent,*lf,*rt; int value; } BSTnode;
typedef struct BST { BSTnode *root; } BST;

1 użytkowników online, w tym zalogowanych: 0, gości: 1