déplacer un noeud d'un arbre vers un autre noeud

déplacer un noeud d'un arbre vers un autre noeud - Java - Programmation

Marsh Posté le 19-12-2020 à 22:36:08    

Bonsoir;
j'ai un arbre binaire et je veux déplacer un noeud qui se trouve dans un coté droit vers un autre noeud au coté gauche.
j'ai 4 noeuds, 1, 2, 3, 4, 5, 6
le noeud 1 est la racine, le noeud 2 est connecté au noeud 1 coté gauche, le noeud 3 est connecté au neoud 1 coté droit, le noeud 4 est connecté au noeud 3 coté droit, le noeud 5 est connecté au noeud 4 coté droit et le noeud 6 est connecté au noeud 5 coté droit.
c-à-d, le pere de 2 est 1 (pere[2]=1), le pere de 3 est 1 (pere[3]=1), le pere de 4 est 3 (pere[4]=3), le pere de 5 est 4 (pere[5]=4), le pere de 6 est 5 (pere[6]=5).
je veux déplacer le noeud 4 vers le noeud 3 coté gauche, et les noeuds  5 et 6 reste connecter au noeud 3 coté droit,
c-à-d, pere[2]=1, pere[3]=1, pere[4]=3, pere[5]=4, pere[6]=5,
 
j'ai fais un essai mais le probleme c'est que les noeuds 5 et 6 se connecte au noeud 4 coté droit
 

Code :
  1. tmp=pere[k+1];
  2. pere[k].right=null;
  3. pere[k-1].left=tmp;


 
j'ai besoin de votre aide, merci.

Reply

Marsh Posté le 19-12-2020 à 22:36:08   

Reply

Marsh Posté le 30-12-2022 à 16:14:30    

5400 lectures et 0 réponses. [:fandalpinee]  
 
C'est pas que je n'aurai pas voulu t'aider mais je ne peux pas t'aider. Désolé .. bon courage. :hello:


Message édité par ink87 le 30-12-2022 à 16:15:40

---------------
Avoir un pêt' au casque
Reply

Marsh Posté le 30-12-2022 à 19:07:38    

Ca date de 2020 sa demande, entretemps le noeud a été déplacé j'espère. :o

Reply

Marsh Posté le 03-01-2023 à 01:31:34    

Et en plus, il suffisait de faire
pere(n).left <- pere(n).right  
pere(n).right <- pere(n).left.right
pere(n).left.right <- null
A+,

Message cité 1 fois
Message édité par gilou le 03-01-2023 à 01:33:53

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 07-01-2023 à 21:58:45    

rat de combat a écrit :

Ca date de 2020 sa demande, entretemps le noeud a été déplacé j'espère. :o


 [:petoulachi:5] effectivement... Désolé


---------------
Avoir un pêt' au casque
Reply

Marsh Posté le 09-01-2023 à 22:33:35    

gilou a écrit :

Et en plus, il suffisait de faire
pere(n).left <- pere(n).right  
pere(n).right <- pere(n).left.right
pere(n).left.right <- null
A+,


 
Ca m'étonnerait parce que si le noeud est à droite, c'est certainement pour une bonne raison.

Reply

Marsh Posté le 12-01-2023 à 00:07:53    

Fais un crobar et tu verras que cela fonctionne (a condition que pere(n).left soit vide au départ, mais c'est ainsi qu'il donne le pb au départ).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-01-2023 à 00:24:44    

Salut Gilou !
 
J'insiste !
 
Que tu implémente le plus grand et le plus petit repectivement à gauche et à droite, ou inversement, plus grand que le père a le bon côté et le plus petit l'autre bon côté.


Message édité par Profil supprimé le 12-01-2023 à 00:26:03
Reply

Marsh Posté le 01-02-2023 à 12:52:57    

Comme je t'avais dit, avec un crobar, ça marche visuellement
 


 Avant                 Après
   1               +     1               +
  / \              +    / \              +
 2   3             +   2   3             +
      \            +      / \            +
       4           +     4   5           +
        \          +          \          +
         5         +           6         +
          \        +                     +
           6       +                     +


 


 Avant                  
   1                
  / \              
 2   3              
      \            
       4            
        \          
         5          
          \        
           6      
   
pere(4).left <- pere(4).right  
 
   1                
  / \              
 2   3              
    / \            
   4   4            
    \   \          
     5   5          
      \   \        
       6   6    
 
pere(4).right <- pere(4).left.right
 
   1                
  / \              
 2   3              
    / \            
   4   5            
    \   \          
     5   6          
      \        
       6    
 
pere(n).left.right <- null  
 
   1                
  / \              
 2   3              
    / \            
   4   5            
        \          
         6          
 


 
Mais bon, c'est pas assez rigoureux. Ceci l'est :
m = pere(n) [fixé au départ, même si n bouge ]
m.left <- m.right  
m.right <- null  (a cette étape on a un arbre binaire valide)
m.right <- m.left.right
m.right.pere <- m (et non plus n)
m.left.right <- null (a cette étape on a un arbre binaire valide)
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed