Son assez facile de trouver le plus proche ancêtre commun dans un BST si tous les éléments sont distincts. Mais si certaines valeurs sont les mêmes. Jusqu'à présent, nous étions simplement comparer les données des noeuds et qui était, mais maintenant nous avons besoin de vérifier l'adresse de nœuds au lieu de juste valeurs?
Ancêtre commun le plus bas dans un arbre de recherche binaire
voix
2
3 réponses
voix 1
1
Oui, au lieu d'utiliser seulement votre keypour la comparaison, utiliser (key, address of node)à titre de comparaison. Cela simplifie le code en traitant avec des clés non uniques.
voix 0
0
Sans voir quel genre de struct que vous utilisez, il est difficile de donner des détails, mais vous pouvez essayer quelque chose comme ça pseudocode:
struct BST {
struct BST* parent;
struct BST* left;
struct BST* right;
void* value;
}
find_common_ancestor(struct BST* x, struct BST* y)
{
set<struct BST*> ancestors;
// Add all of x's ancestors to set.
while (true) {
ancestors.insert(x);
if (x == NULL)
break;
x = x=>parent;
}
// Check y's ancestors against x's until a match is found.
while (true) {
if (ancestors.count(y) > 0)
return y;
y = y->parent;
}
}
voix 0
0
voici psudocode. il suffit de les convertir en syntaxe.
GETLeastCommonAn(BINARYTREE BT, NODE A, NODE B)
IF Root==NIL
return NIL
ENDIF
IF Root==A OR root==B
return Root
ENDIF
Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)
IF Left! = NIL AND Right! = NIL
return root
ELSEIF Left! = NIL
Return Left
ELSE
Return Right
ENDIF













