Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรมตรวจสอบต้นไม้ไบนารีเป็น BST หรือไม่อยู่ใน C ?


ต้นไม้ไบนารีเป็นโครงสร้างข้อมูลต้นไม้ซึ่งมีโหนดย่อยสองโหนดสำหรับแต่ละโหนด โหนดย่อยที่มีสองเรียกว่าลูกซ้ายและขวา

BST คือโครงสร้างแบบทรีที่ทรีย่อยด้านซ้ายมีโหนดที่มีค่าน้อยกว่ารูท และทรีย่อยทางขวามีโหนดที่มีค่ามากกว่ารูทนั้น

ที่นี่ เราจะตรวจสอบว่าไบนารีทรีเป็น BST หรือไม่ -

ในการตรวจสอบสิ่งนี้ เราต้องตรวจสอบเงื่อนไข BST บนไบนารีทรี สำหรับการตรวจสอบโหนดรูทสำหรับโหนดย่อยด้านซ้ายควรน้อยกว่ารูทนั้น ลูกที่ถูกต้องควรมีค่ามากกว่ารูทนั้นสำหรับโหนดทั้งหมดของทรีที่มีรายการย่อยอยู่

โปรแกรมตรวจสอบว่าต้นไม้ไบนารีเป็น BST หรือไม่

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
class node {
   public:
      int data;
   node* left;
   node* right;
   node(int data) {
      this->data = data;
      this->left = NULL;
      this->right = NULL;
   }
};
int isBSTUtil(node* node, int min, int max);
int isBST(node* node) {
   return(isBSTUtil(node, INT_MIN, INT_MAX));
}
int isBSTUtil(node* node, int min, int max) {
   if (node==NULL)
      return 1;
   if (node->data < min || node->data > max)
      return 0;
   return
      isBSTUtil(node->left, min, node->data-1) && isBSTUtil(node->right, node->data+1, max);
}
int main() {
   node *root = new node(8);
   root->left = new node(3);
   root->right = new node(10);
   root->left->left = new node(1);
   root->left->right = new node(6);
   if(isBST(root))
      cout<<"The given tree is a BST";
   else
      cout<<"The given tree is Not a BST";
   return 0;
}

ผลลัพธ์

The given tree is a BST

อธิบายโค้ด

รหัสด้านบนตรวจสอบ BST เมธอดหลัก สร้างแผนผังและเรียกเมธอด isBST() เมธอดนี้จะตรวจสอบว่าลูกซ้ายและขวาทำตามกฎ BST หรือไม่ และทรีย่อยที่สร้างขึ้นนั้นเป็นของ BST เช่นกันโดยใช้เมธอด isBSTuntil()