Cette question m'a récemment été posée lors d'une interview. Quand j'étais coincé, on m'a donné un indice.
Astuce: Supposons que vous ayez à résoudre ce même problème pour un tableau trié, comment le résoudriez-vous alors?
Me: Conservez deux pointeurs. Un au début, un autre à la fin. Si la somme des éléments de ces pointeurs est inférieure à la somme requise, déplacez le pointeur avant vers la droite, sinon déplacez le pointeur arrière vers la gauche. Interviewer: Comment pourriez-vous faire la même chose pour un arbre de recherche binaire? Me: Effectuez une traversée d'ordre et enregistrez les pointeurs sur les noeuds d'un tableau. Et utilisez la même logique que dans le cas des tableaux.
Interviewer: Oui, cela fonctionne. Mais la complexité de l'espace est O (n). Pourriez-vous le réduire?
Moi (après beaucoup de temps): Ok, convertissez le BST dans une liste doublement liée, en utilisant this algo. Et puis utilisez la même logique que dans le cas de tableau. La comlexité spatiale sera O (lg (n)) en raison de la récursivité.
Est-ce que ce sont les devoirs? (Il est généralement bon de mentionner.) – ShreevatsaR
sont tous les chiffres positifs? pouvons-nous supposer qu'il existe une paire de nombres valide? si S est 8 et 4 est dans l'arbre, peut-on donner 4 comme réponse? –
@SR Non ce n'est pas un devoir. Juste curieux. – Geek