Rumah > pembangunan bahagian belakang > C++ > Terjemah BST Terbesar dalam Pokok Binari dalam C++

Terjemah BST Terbesar dalam Pokok Binari dalam C++

PHPz
Lepaskan: 2023-09-13 16:29:04
ke hadapan
907 orang telah melayarinya

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

Dalam pokok binari, setiap nod anak hanya mempunyai dua nod (kiri dan kanan). Struktur pokok hanyalah perwakilan data. Pokok Carian Binari (BST) ialah jenis pokok binari khas yang memenuhi syarat ini -

  • Nod anak kiri lebih kecil berbanding nod induknya

    #🎜 🎜#
  • Nod induk nod anak kanan lebih besar daripada nod anak

Dengan andaian diberi pokok binari, kita harus mencari pokok carian binari (BST) yang terbesar.

Dalam tugasan ini, kami akan mencipta fungsi untuk mencari BST terbesar dalam pokok binari. Apabila pokok binari itu sendiri adalah BST, saiz keseluruhan pokok binari boleh ditentukan. Contohnya -

Enter

  10
  /\
 5  15
 /\  \
1  8  7
Salin selepas log masuk

Seperti yang ditunjukkan dalam gambar, subpokok BST yang diserlahkan adalah yang terbesar dalam contoh ini. '3' ialah saiz subpokok, jadi nilai pulangan ialah saiz subpokok.

Input

    52
    / \
   37 67
   /\ / \
 12 27 57 77
          /\
         72 87
Salin selepas log masuk

Outputrreee adalah lebih kecil daripada panjangnya nod induknya Subpohon panjang mempunyai paling banyak tiga nod BST saiz.

Kaedah untuk mencari BST terbesar dalam pokok binari yang diberikan

Untuk setiap nod x, pokok binari ialah BST jika titik berikut adalah sah. Hanya nod dengan data kurang daripada data nod induknya akan muncul dalam subpokok kiri nod. Hanya satu nod boleh mempunyai lebih banyak data daripada induknya. Kedua-dua subpokok kiri dan subpokok kanan hendaklah diwakili oleh pepohon carian binari (BST).

Algoritma akan menjadi -

Kami akan melakukan traversal tertib dari pokok binari dan menggunakan rekursi. Untuk nod semasa "ROOT" kami akan melakukan perkara berikut -

    Jika ia adalah punca BST yang sah, kami akan mengembalikan saiznya.
  • Jika tidak, kita akan dapati BST terbesar di subpokok kiri dan kanan.
  • Contoh
5
Salin selepas log masuk

Output

#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;
}
Salin selepas log masuk

Kesimpulan

Kesimpulan #🎜🎜 mempelajari apakah pokok binari dan pokok carian binari dan bagaimana untuk mencari BST terbesar dalam pokok binari yang diberikan dengan bantuan rekursi. Dengan bantuan rekursi, kami akan mengetahui sama ada subtree di bawah setiap nod ialah BST dan mengembalikan nilai yang sepadan.

Atas ialah kandungan terperinci Terjemah BST Terbesar dalam Pokok Binari dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan