একটি বাইনারি গাছ হল একটি বিশেষ ধরনের গাছ যেখানে গাছের প্রতিটি নোডে সর্বাধিক দুটি চাইল্ড নোড থাকতে পারে। এই শিশু নোডগুলি ডান শিশু এবং বাম শিশু হিসাবে পরিচিত৷
একটি সাধারণ বাইনারি গাছ হল −

গাছের প্রতিনিধিত্ব করার জন্য, দুটি উপায় আছে,
- ডাইনামিক নোড উপস্থাপনা যা লিঙ্ক করা তালিকা ব্যবহার করে
- অনুক্রমিক উপস্থাপনা যা অ্যারে ব্যবহার করে।
এখানে, আমরা বাইনারি গাছের অ্যারে উপস্থাপনা সম্পর্কে আলোচনা করব। এর জন্য আমাদের BT এর নোডগুলিকে নম্বর দিতে হবে। এই সংখ্যাকরণ 0 থেকে (n-1) বা 1 থেকে n পর্যন্ত শুরু হতে পারে।
অ্যারেতে নোডের অবস্থান এবং তাদের পিতামাতা এবং চাইল্ড নোডগুলি বের করা যাক৷
যখন আমরা 0 সূচক ভিত্তিক সিকোয়েন্সিং, ব্যবহার করি
ধরুন প্যারেন্ট নোড হল একটি ইনডেক্স p.
তারপর, বাম_চাইল্ড নোডটি ইনডেক্সে (2*p)+ 1।
ডান_চাইল্ড নোডটি ইনডেক্সে (2*p) + 2।
রুট নোড ইনডেক্স 0 এ রয়েছে।
left_child সূচক 1 এ আছে।
Right_child সূচক 2 এ রয়েছে।
যখন আমরা 1 সূচক ভিত্তিক সিকোয়েন্সিং, ব্যবহার করি
ধরুন প্যারেন্ট নোড index p, এ আছে
Right_node index (2*p) এ আছে
Left_node index (2*p)+1 এ আছে .
রুট নোড ইনডেক্স 1 এ রয়েছে।
left_child সূচক 2 এ আছে।
Right_child সূচক 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-----