Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

एक सामान्य BST को C++ में संतुलित BST में बदलें

इस ट्यूटोरियल में, हम एक सामान्य बाइनरी सर्च ट्री को संतुलित बाइनरी सर्च ट्री में बदलने के लिए एक प्रोग्राम पर चर्चा करेंगे।

इसके लिए हमें बाएं या दाएं एक तिरछा बाइनरी सर्च ट्री प्रदान किया जाएगा। हमारा काम नियमों के एक निश्चित सेट का पालन करते हुए इसे एक संतुलित बाइनरी सर्च ट्री में बदलना है।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
//node structure of tree
struct Node{
   int data;
   Node* left, *right;
};
//traversing tree and storing node pointers
//in vector nodes
void store_nodes(Node* root, vector<Node*> &nodes){
   if (root==NULL)
      return;
   store_nodes(root->left, nodes);
   nodes.push_back(root);
   store_nodes(root->right, nodes);
}
//constructing binary tree
Node* construct_tree(vector<Node*> &nodes, int start,
int end){
   if (start > end)
      return NULL;
   //make the middle element to be the root
   int mid = (start + end)/2;
   Node *root = nodes[mid];
   root->left = construct_tree(nodes, start, mid-1);
   root->right = construct_tree(nodes, mid+1, end);
   return root;
}
//converting an unbalanced BST to a balanced BST
Node* buildTree(Node* root){
   //storing nodes of given BST in sorted order
   vector<Node *> nodes;
   store_nodes(root, nodes);
   int n = nodes.size();
   return construct_tree(nodes, 0, n-1);
}
//creation of new node
Node* newNode(int data){
   Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
//performing preorder traversal
void preOrder(Node* node){
   if (node == NULL)
      return;
   printf("%d ", node->data);
   preOrder(node->left);
   preOrder(node->right);
}
int main(){
   Node* root = newNode(10);
   root->left = newNode(8);
   root->left->left = newNode(7);
   root->left->left->left = newNode(6);
   root->left->left->left->left = newNode(5);
   root = buildTree(root);
   printf("Preorder traversal of balanced BST : \n");
   preOrder(root);
   return 0;
}

आउटपुट

Preorder traversal of balanced BST :
7 5 6 8 10

  1. सी ++ में बीएसटी में नोड हटाएं

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हम एक कुंजी k लेंगे, और हमें दिए गए कुंजी k को BST से हटाना होगा, और अद्यतन BST को वापस करना होगा। तो अगर पेड़ जैसा है - और कुंजी k =3, तो आउटपुट ट्री होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - रूट नोड को हटाने के लिए deleteR

  1. C++ में पूर्ण ट्री नोड्स की गणना करें

    मान लीजिए कि हमारे पास एक पूर्ण बाइनरी ट्री है, हमें नोड्स की संख्या गिननी है। तो अगर पेड़ जैसा है - तो आउटपुट 6 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे यह पुनरावर्ती दृष्टिकोण का उपयोग करेगा। यह विधि, countNodes() जड़ को तर्क के रूप में ले रही है। घंटा:=0 और एचएल:=0 रूट के रूप में

  1. C++ में BST के दो नोड्स के बीच अधिकतम तत्व

    समस्या कथन एन तत्वों की एक सरणी और दो पूर्णांक ए, बी को देखते हुए जो दिए गए सरणी से संबंधित है। एआर [0] से एआर [एन -1] तक तत्व डालने से बाइनरी सर्च ट्री बनाएं। कार्य A से B तक के पथ में अधिकतम तत्व को खोजना है। उदाहरण यदि सरणी {24, 23, 15, 36, 19, 41, 25, 35} है तो हम निम्न प्रकार से BST बना सकते