Heim >Backend-Entwicklung >C++ >Finden Sie den lexikografisch kleinsten Palindrompfad in einem Binärbaum

Finden Sie den lexikografisch kleinsten Palindrompfad in einem Binärbaum

WBOY
WBOYnach vorne
2023-08-27 13:53:07816Durchsuche

Finden Sie den lexikografisch kleinsten Palindrompfad in einem Binärbaum

Binärbaum ist eine grundlegende Datenstruktur in der Informatik und bietet eine effiziente Möglichkeit, Daten hierarchisch zu organisieren. Beim Durchqueren dieser Bäume stoßen wir häufig auf interessante Rechenprobleme. Unter ihnen ist die Bestimmung des lexikographisch kleinsten palindromischen Pfades eine faszinierende Herausforderung. Dieser Artikel veranschaulicht einen effizienten C++-Algorithmus zur Lösung dieses Problems und liefert detaillierte Beispiele zum besseren Verständnis.

Problemstellung

In einem Binärbaum, in dem jeder Knoten einen englischen Kleinbuchstaben darstellt, besteht unser Ziel darin, den lexikografisch kleinsten Palindrompfad zu finden. Wenn mehrere Pfade den Kriterien entsprechen, können wir jeden davon zurückgeben. Wenn kein Palindrompfad vorhanden ist, sollten wir eine leere Zeichenfolge zurückgeben.

Methode

Unsere Lösung für dieses Problem besteht darin, einen Binärbaum mithilfe einer DFS-Technik (Tiefensuche) zu durchlaufen. Mit der DFS-Methode können wir jeden Pfad vom Wurzelknoten bis zu den Blattknoten untersuchen.

C++-Lösung

Dies ist der C++-Code, der die obige Methode implementiert -

Beispiel

#include<bits/stdc++.h>
using namespace std;

struct Node {
   char data;
   Node *left, *right;
   Node(char c) : data(c), left(NULL), right(NULL) {}
};

string smallestPalindrome(Node* node, string s) {
   if(node == NULL)
      return "";
   
   s += node->data;
   
   if(node->left == NULL && node->right == NULL)
      return string(s.rbegin(), s.rend()) == s ? s : "";
   
   string left = smallestPalindrome(node->left, s);
   string right = smallestPalindrome(node->right, s);
   
   if(left == "")
      return right;
   if(right == "")
      return left;
   
   return min(left, right);
}

string smallestPalindromicPath(Node* root) {
   return smallestPalindrome(root, "");
}

int main() {
   Node* root = new Node('a');
   root->left = new Node('b');
   root->right = new Node('a');
   root->left->left = new Node('a');
   root->left->right = new Node('a');
   root->right->left = new Node('b');
   root->right->right = new Node('a');
   
   cout << smallestPalindromicPath(root) << endl;
   
   return 0;
}

Ausgabe

aaa

Testfälle und Anleitungen

Lassen Sie uns einen Binärbaum mit der folgenden Struktur überprüfen -

     a
   /   \
  b     a
 / \   / \
a   a b   a

In diesem Binärbaum gibt es mehrere Pfade vom Wurzelknoten zu den Blattknoten. Unter all diesen Pfaden gibt die Funktion den lexikografisch kleinsten Palindrompfad zurück. In diesem Fall sind die möglichen Palindrompfade „aaa“ und „aba“. Daher lautet die Ausgabe „aaa“, was der lexikografisch kleinste Palindrompfad ist.

Fazit

Die Bestimmung des lexikographisch minimalen Palindrompfads in einem Binärbaum ist ein interessantes Problem, das Baumdurchquerungs- und String-Manipulationskonzepte kombiniert. Die oben bereitgestellte C++-Lösung verwendet einen Tiefensuchansatz, um dieses Problem effektiv zu lösen. Das Verständnis dieser Probleme kann Ihr Verständnis von Binärbäumen verbessern und Ihre Fähigkeit verbessern, Informatikprobleme zu lösen.

Das obige ist der detaillierte Inhalt vonFinden Sie den lexikografisch kleinsten Palindrompfad in einem Binärbaum. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen