ধরুন আমাদের একটি বাইনারি গাছ আছে। গাছটি সম্পূর্ণ বাইনারি ট্রি কি না তা দেখতে হবে। লেভেল n-এর একটি সম্পূর্ণ বাইনারি ট্রি, যার n-1 সম্পূর্ণ স্তর রয়েছে এবং n স্তরের সমস্ত নোড বাম দিক থেকে পূর্ণ। তাই যদি ইনপুট ট্রি −
এর মত হয়
তাহলে আউটপুট সত্য হবে, যেহেতু এটি সম্পূর্ণ বাইনারি ট্রি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
যদি গাছ খালি থাকে, তাহলে শূন্য ফেরত দিন
-
একটি সারি q তৈরি করুন এবং এতে রুট প্রবেশ করান
-
পতাকা সেট করুন :=সত্য
-
যখন q এর কিছু উপাদান আছে
-
sz :=সারির আকার
-
যখন sz 0
নয়-
নোড :=সারি থেকে মুছে ফেলার পরে নোড
-
যদি নোড সাবট্রি ছেড়ে থাকে, তাহলে
-
যদি পতাকা সেট করা থাকে, তাহলে q-তে নোডের বাম সাবট্রি ঢোকান, অন্যথায় মিথ্যা রিটার্ন করুন
-
-
অন্যথায় পতাকা :=মিথ্যা
-
যদি নোডের ডান সাবট্রি থাকে, তাহলে
-
যদি পতাকা সেট করা থাকে, তাহলে q-তে নোডের ডান সাবট্রি সন্নিবেশ করুন, অন্যথায় মিথ্যা ফেরত দিন
-
-
পতাকা :=মিথ্যা
-
sz :=sz – 1
-
-
-
রিটার্ন টাউর
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int data){ val = data; left = NULL; right = NULL; } }; void insert(TreeNode **root, int val){ queue<TreeNode*> q; q.push(*root); while(q.size()){ TreeNode *temp = q.front(); q.pop(); if(!temp->left){ if(val != NULL) temp->left = new TreeNode(val); else temp->left = new TreeNode(0); return; }else{ q.push(temp->left); } if(!temp->right){ if(val != NULL) temp->right = new TreeNode(val); else temp->right = new TreeNode(0); return; }else{ q.push(temp->right); } } } TreeNode *make_tree(vector<int> v){ TreeNode *root = new TreeNode(v[0]); for(int i = 1; i<v.size(); i++){ insert(&root, v[i]); } return root; } class Solution { public: bool isCompleteTree(TreeNode* root) { if(!root)return true; queue <TreeNode*> q; q.push(root); bool isComplete = true; while(!q.empty()){ int sz = q.size(); while(sz--){ TreeNode* node = q.front(); q.pop(); if(node->left){ if(isComplete){ q.push(node->left); }else return false; }else{ isComplete = false; } if(node->right){ if(isComplete){ q.push(node->right); }else return false; }else{ isComplete = false; } } } return true; } }; main(){ vector<int> v = {1,2,3,4,5,6}; TreeNode *r1 = make_tree(v); Solution ob; cout << (ob.isCompleteTree(r1)); }
ইনপুট
{1,2,3,4,5,6}
আউটপুট
1