Existe-t-il un moyen de grimper directement au nombre sans visiter d'autres succursales? Par exemple si j'ai le numéro 11 je dois le visiter en allant à 2 puis à 5 et à 11 sans aucun type de recherche."Escalade" d'un arbre binaire
0
/ \
/ \
/ \
1 2
/ \ / \
/ \ / \
3 4 5 6
/\ /\ /\ /\
/ \ / \ / \ / \
7 8 9 10 11 12 13 14
J'ai tué beaucoup de temps la seule chose que je suis maintenant est que pour obtenir la première route (1 ou 2) du numéro N vous devez (n-1)/2 jusqu'à ce que n est égal à 1 ou 2. Exemple: (12 - 1)/2 => (5 - 1)/2 => 2. (7-1)/2 => (3-1)/2 => 1. (11-1)/5 => (2-1)/2 => 1. Mais fin il serait correct de couper la racine (0) et traiter 2 comme une nouvelle:
2
/\
/ \
/ \
5 6
/\ /\
/ \ / \
11 12 13 14
to
0
/\
/ \
/ \
1 2
/\ /\
/ \ / \
3 4 5 6
Solution :
int climb(int ID, Tree<int> t)
{
int time = 0;
if (tree.exists()) {
time += t.value();
tree t1, t2;
t.branches(t1, t2);
int branch = ID;
while (branch > 2) branch = (branch - 1)/2;
int offset = 1;
while (offset*2 < ID - 1) offset *= 2;
if (aux == 1) time += climb(ID - offset2/, a1);
if (aux == 2) time += climb(ID - offset, a2);
}
return time;
}
Vous pouvez accéder à n'importe quel élément (1, 5, 13, etc) de l'arbre binaire complet.
Je pense que le mot que vous recherchez est 'traversée', pas « montée '. En outre, la récursivité est l'essence habituelle d'une solution – sehe
Traverse normalement rechercher tous jusqu'à trouver et je sais comment faire celui-ci, mais je propose "escalade" qui n'accède que les arbres qui sont exactement sur le chemin. – user1021852
Cela dépend, est-ce que votre arbre est un arbre binaire parfait (toutes les feuilles sont à la même profondeur, et dans chaque parent a deux enfants)? Les valeurs des nœuds sont-elles similaires à celles de l'exemple? Si la réponse aux deux questions est oui alors oui vous pouvez faire ce que vous voulez. Si non, alors non vous ne pouvez pas. – pnezis