Rumah > Artikel > pembangunan bahagian belakang > Terjemah BST Terbesar dalam Pokok Binari dalam C++
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
#🎜 🎜#Enter
10 /\ 5 15 /\ \ 1 8 7Seperti 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
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 diberikanUntuk 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 -
5
#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; }
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!