Heim > Backend-Entwicklung > C++ > Hauptteil

Übersetzen Sie den größten BST in einem Binärbaum in C++

PHPz
Freigeben: 2023-09-13 16:29:04
nach vorne
883 Leute haben es durchsucht

在C++中,将二叉树中的最大二叉搜索树(Largest BST in a Binary Tree)进行翻译

In einem Binärbaum hat jeder untergeordnete Knoten nur zwei Knoten (links und rechts). Eine Baumstruktur ist lediglich eine Darstellung von Daten. Ein binärer Suchbaum (BST) ist eine spezielle Art von Binärbaum, der diese Bedingungen erfüllt:

  • Der linke untergeordnete Knoten ist kleiner im Vergleich zu seinem übergeordneten Knoten.

  • Der übergeordnete Knoten des rechten untergeordneten Knotens ist größer als der untergeordnete Knoten Knoten

Angenommen, wir sollten bei einem gegebenen Binärbaum den größten binären Suchbaum (BST) finden.

In dieser Aufgabe erstellen wir eine Funktion, um den größten BST in einem Binärbaum zu finden. Wenn der Binärbaum selbst ein BST ist, kann die Größe des gesamten Binärbaums bestimmt werden. Beispiel:

Geben Sie

  10
  /\
 5  15
 /\  \
1  8  7
Nach dem Login kopieren

ein, wie im Bild gezeigt. In diesem Fall ist der hervorgehobene BST-Teilbaum der größte. „3“ ist die Größe des Teilbaums, daher ist der Rückgabewert die Größe des Teilbaums.

Eingabe

    52
    / \
   37 67
   /\ / \
 12 27 57 77
          /\
         72 87
Nach dem Login kopieren

Ausgabe

5
Nach dem Login kopieren

Ein Teilbaum, dessen Knotenlänge kleiner als die Länge seines Elternteils ist, hat höchstens drei BST-Knoten der Größe.

Methode zum Ermitteln der maximalen BST in einem gegebenen Binärbaum

Für jeden Knoten x ist ein Binärbaum ein BST, wenn die folgenden Punkte gültig sind. Im linken Teilbaum des Knotens werden nur Knoten angezeigt, deren Daten kleiner sind als die Daten ihres übergeordneten Knotens. Nur ein Knoten kann mehr Daten haben als sein übergeordneter Knoten. Sowohl der linke als auch der rechte Teilbaum sollten durch einen binären Suchbaum (BST) dargestellt werden.

Der Algorithmus wird sein:

Wir werden eine Inorder-Traversierung von einem Binärbaum aus durchführen und Rekursion verwenden. Für den aktuellen Knoten „ROOT“ werden wir Folgendes tun:

  • Wenn es sich um die Wurzel eines gültigen BST handelt, geben wir seine Größe zurück.

  • Ansonsten finden wir die maximale BST im linken und rechten Teilbaum.

Beispiel

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left;
   struct Node *right;
};
struct Node *
newNode (int data) {
   struct Node *node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
struct Detail {
   int size;
   int max;
   int min;
   int ans;
   bool isBST;
};
bool isBST (Node * root, int min, int max) {
   if (root == NULL) {
      return true;
   }
   if (root->data < min || root->data > max) {
      return false;
   }
   return isBST (root->left, min, root->data - 1) &&
   isBST (root->right, root->data + 1, max);
}
int size (Node * root) {
   if (root == NULL) {
      return 0;
   }
   return 1 + size (root->left) + size (root->right);
}
int largestBST (Node * root) {
   // Current Subtree is BST.
   if (isBST (root, INT_MIN, INT_MAX) == true) {
      return size (root);
   }
   // Find largest BST in left and right subtrees.
   return max (largestBST (root->left), largestBST (root->right));
}
int main () {
   struct Node *root = newNode (67);
   root->left = newNode (72);
   root->right = newNode (77); root->left->left = newNode (57);
   printf ("Size of the largest BST is %d", largestBST (root));
   return 0;
}
Nach dem Login kopieren

Ausgabe

Size of the largest BST is 2
Nach dem Login kopieren

Fazit

In dieser Frage haben wir gelernt, was Binärbäume und binäre Suchbäume sind und wie man mithilfe der Rekursion den größten BST in einem bestimmten Binärbaum findet. Mit Hilfe der Rekursion finden wir heraus, ob der Teilbaum unter jedem Knoten ein BST ist und geben den entsprechenden Wert zurück.

Das obige ist der detaillierte Inhalt vonÜbersetzen Sie den größten BST in einem Binärbaum in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage