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

C++ में सरणी कार्यान्वयन के साथ बाइनरी ट्री


एक बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें ट्री का प्रत्येक नोड अधिकतम दो चाइल्ड नोड रख सकता है। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के नाम से जाना जाता है।

एक साधारण बाइनरी ट्री है -

C++ में सरणी कार्यान्वयन के साथ बाइनरी ट्री

ट्री को दर्शाने के दो तरीके हैं,

  • डायनामिक नोड प्रतिनिधित्व जो लिंक्ड लिस्ट का उपयोग करता है
  • अनुक्रमिक प्रतिनिधित्व जो सरणी का उपयोग करता है।

यहां, हम बाइनरी ट्री के सरणी प्रतिनिधित्व के बारे में चर्चा करेंगे। इसके लिए हमें BT के नोड्स को नंबर देना होगा। यह नंबरिंग 0 से (n-1) या 1 से n तक शुरू हो सकती है।

आइए सरणी में नोड्स और उनके पैरेंट और चाइल्ड नोड्स की स्थितियों को निकालते हैं।

जब हम 0 इंडेक्स आधारित अनुक्रमण का उपयोग करते हैं,

मान लीजिए पैरेंट नोड इंडेक्स p पर है।

तब, लेफ्ट_चाइल्ड नोड इंडेक्स (2*p)+ 1 पर है।

राइट_चाइल्ड नोड इंडेक्स (2*p) + 2 पर है।

रूट नोड इंडेक्स 0 पर है।

लेफ्ट_चाइल्ड इंडेक्स 1 पर है।

राइट_चाइल्ड इंडेक्स 2 पर है।

जब हम 1 इंडेक्स आधारित अनुक्रमण का उपयोग करते हैं,

मान लीजिए पैरेंट नोड इंडेक्स p, पर है

राइट_नोड इंडेक्स (2*p). पर है।

लेफ्ट_नोड इंडेक्स (2*p)+1 पर है।

रूट नोड इंडेक्स 1 पर है।

लेफ्ट_चाइल्ड इंडेक्स 2 पर है।

राइट_चाइल्ड इंडेक्स 3 पर है।

उदाहरण

#include<bits/stdc++.h> using namespace std; char tree[10]; int rootnode(char key){     if(tree[0] != '\0')         cout<<"Tree already had root";     else         tree[0] = key;     return 0; } int leftchild(char key, int parent){     if(tree[parent] == '\0')         cout <<"\nCan't set child at"<<(parent * 2) + 1<<" , no parent found";     else         tree[(parent * 2) + 1] = key;     return 0; } int rightchild(char key, int parent){     if(tree[parent] == '\0')         cout<<"\nCan't set child at"<<(parent * 2) + 2<<" , no parent found";     else         tree[(parent * 2) + 2] = key;     return 0; } int traversetree(){     cout << "\n";     for(int i = 0; i < 10; i++){         if(tree[i] != '\0')             cout<<tree[i];         else             cout<<"-";     }     return 0; } int main(){     rootnode('A');     rightchild('C', 2);     leftchild('D', 0);     rightchild('E', 1);     rightchild('F', 2);     traversetree();     return 0; }

आउटपुट

Can't set child at6 , no parent found Can't set child at6 , no parent found AD--E-----

  1. C++ में बाइनरी ट्री प्रिंट करना C++ में बाइनरी ट्री प्रिंट करना

    मान लीजिए हमें एक बाइनरी ट्री को m×n 2D स्ट्रिंग सरणी में इन नियमों के आधार पर प्रदर्शित करना है: पंक्ति संख्या m दी गई बाइनरी ट्री की ऊंचाई के समान होनी चाहिए। स्तंभ संख्या n हमेशा एक विषम संख्या होनी चाहिए। रूट नोड का मान पहली पंक्ति के ठीक बीच में रखा जाना चाहिए जहां इसे रखा जा सकता है। वह स्तं

  1. C++ में बाइनरी ट्री प्रूनिंग C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का हेड नोड root है, जहाँ प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री लौटाना है जहाँ हर वह सबट्री हटा दी गई हो जिसमें 1 नहीं है। उदाहरण: इनपुट ट्री [1,1,0,1,1,0,1,0] के लिए, आउटपुट ट्री में केवल वही नोड्स रहेंगे जिनके सबट्री में कम से कम एक 1 है। पोस्ट-ऑर्

  1. C++ में सरणी कार्यान्वयन के साथ बाइनरी ट्री C++ में सरणी कार्यान्वयन के साथ बाइनरी ट्री

    एक बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें ट्री का प्रत्येक नोड अधिकतम दो चाइल्ड नोड रख सकता है। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के नाम से जाना जाता है। एक साधारण बाइनरी ट्री है - ट्री को दर्शाने के दो तरीके हैं, डायनामिक नोड प्रतिनिधित्व जो लिंक्ड लिस्ट का उपयोग करता है अनुक्