समस्या विवरण
बाएं और दाएं बच्चों के साथ एक बाइनरी ट्री दिया गया है और कार्य दिए गए ट्री के सटीक दाएं और बाएं बच्चे को प्रिंट करना है।
उदाहरण
इनपुट: 106 20 320 100 21 61 52 आउटपुट: 106 20 320 100 52
एल्गोरिदम
शुरुआत
चरण 1: नोड की संरचना बनाएं
int data घोषित करें
struct node *left और *right घोषित करें
चरण 2: struct node* newNode(int val) बनाएं
node* temp = new node बनाएं
temp->data = val सेट करें
temp->left = temp->right = NULL सेट करें
return (temp)
चरण 3: void print(node *root) फंक्शन घोषित करें
यदि root == NULL तो वापस करें
STL queue que उपयोग करें
que.push(root) कॉल करें
STL vector ans उपयोग करें
जब तक !que.empty() लूप
int n = que.size() सेट करें
i = 0 से n-1 तक लूप
node *temp = que.front() सेट करें
que.pop() सेट करें
यदि i == 0 तो
ans.push_back(temp->data) सेट करें
अंत
अन्यथा यदि i == n-1 तो
ans.push_back(temp->data) सेट करें
अंत
यदि temp->left तो que.push(temp->left)
यदि temp->right तो que.push(temp->right)
अंत
अंत
auto i : ans के लिए लूप
i प्रिंट करें
अंत
चरण 4: main() में
node *root = newNode(106) घोषित करें
print(root) कॉल करें
रोकें
C++ प्रोग्राम उदाहरण
#include <bits/stdc++.h>
using namespace std;
struct node {
int data;
struct node* left, *right;
};
struct node* newNode(int val){
node* temp = new node;
temp->data = val;
temp->left = temp->right = NULL;
return (temp);
}
void print(node *root) {
if(root == NULL)
return;
queue que;
que.push(root);
vector ans;
while(!que.empty()){
int n = que.size();
for(int i = 0; i < n; i++){
node *temp = que.front();
que.pop();
if(i == 0)
ans.push_back(temp->data);
else if(i == n-1)
ans.push_back(temp->data);
if(temp->left)
que.push(temp->left);
if(temp->right)
que.push(temp->right);
}
}
for(auto i : ans)
cout << i << " ";
}
int main(){
node *root = newNode(106);
root->left = newNode(20);
root->right = newNode(320);
root->left->left = newNode(100);
root->left->right = newNode(21);
root->right->left = newNode(61);
root->right->right = newNode(52);
print(root);
return 0;
}
आउटपुट
उपरोक्त प्रोग्राम चलाने पर निम्नलिखित आउटपुट उत्पन्न होगा:
106 20 320 100 52