0% found this document useful (0 votes)
6 views14 pages

Tree and Queue Implementations in C++

Uploaded by

hexus12345king
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views14 pages

Tree and Queue Implementations in C++

Uploaded by

hexus12345king
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Date-19/11/25

TOPIC-- TREES
Q1) Bst implementation and
preorder,inorder and postorder functions.
#include <iostream>
#include <vector>
using namespace std;
struct Node{
Node* right;
Node* left;
int data;
Node(int x){
data=x;
left=NULL;
right=NULL;
}
};
Node* create(Node* root,int key){
if(!root){
Node* temp=new Node(key);
return temp;
}
if(root->data>key){
root->left=create(root->left,key);
}
else root->right=create(root->right,key);
}
void preorder(Node* root){
if(!root) return;
cout<<root->data<<" ";
preorder(root->left);
preorder(root->right);
}
void inorder(Node* root){
if(!root) return;
inorder(root->left);
cout<<root->data<<" ";
inorder(root->right);
}
void postorder(Node* root){
if(!root) return;
postorder(root->left);
postorder(root->right);
cout<<root->data<<" ";
}
int main(){
vector<int> v={1,2,3,4,5,7,8,9,10};
Node* root=new Node(6);
cout<<"creating BST";
for(int i=0;i<[Link]();i++){
create(root,v[i]);
}
cout<<endl;
cout<<"Pre-Order Traversal : ";
preorder(root);
cout<<endl;
cout<<"In-Order Traversal : ";
inorder(root);
cout<<endl;
cout<<"Post-Order Traversal : ";
postorder(root);
cout<<endl;
return 0;
}

OUTPUT
Date-29/10/25

TOPIC—QUEUES

Q1) Distance and petrol pump problem.

#include <bits/stdc++.h>
using namespace std;
int main(){
int n,ind;
cout<<"no. of petrol pump"<<endl;
cin>>n;
cout<<"starting petrol pump"<<endl;
cin>>ind;
vector<int> p(n),d(n);
cout<<"enter petrol pump capacity"<<endl;
for(int i=0;i<n;i++){
cin>>p[i];
}
cout<<"enter distance between current and next petrol pump"<<endl;
for(int i=0;i<n;i++){
cin>>d[i];
}
int petrol=0;
for(int i=0;i<n;i++){
petrol=petrol+p[(ind+i)%n]-d[(ind+i+1)%n];
if(petrol<0){
cout<<"false";
return 0;
}
}
cout<<"true";
return 0;
}
OUTPUT
Testcase 1:

Testcase 2:
Q2) Implement stack using queues.

#include <iostream>
#include <queue>
using namespace std;
void push(queue<int>& q1, queue<int>& q2, int x){
[Link](x);
while(![Link]()){
[Link]([Link]());
[Link]();
}
swap(q1, q2);
}
void pop(queue<int>& q1){
if([Link]()){
cout<<"Stack is empty\n";
return;
}
[Link]();
}
int top(queue<int>& q1){
if([Link]()){
cout<<"Stack is empty\n";
return -1;
}
return [Link]();
}
bool empty(queue<int>& q1){
return [Link]();
}
void printAll(queue<int>& q1){
if([Link]()){
cout<<"Stack is empty\n";
return;
}
queue<int> temp = q1;
cout<<"Stack elements: ";
while(![Link]()){
cout<<[Link]()<<" ";
[Link]();
}
cout<<endl;
}
int main(){
queue<int> q1, q2;
push(q1, q2, 10);
push(q1, q2, 20);
push(q1, q2, 30);
cout<<"Top element: "<<top(q1)<<endl;
pop(q1);
cout<<"Top element after pop: "<<top(q1)<<endl;
printAll(q1);
push(q1, q2, 40);
push(q1, q2, 50);
cout<<"After pushing 40 and 50:"<<endl;
printAll(q1);
while(!empty(q1)){
cout<<"Popping top element: "<<top(q1)<<endl;
pop(q1);
}
cout<<"Is stack empty? "<<(empty(q1)?"Yes":"No")<<endl;
return 0;
}

OUTPUT
DATE-OCTOBER 8,2025
TOPIC-ARRAYS AND LINKED LIST
#include <iostream>
#include <vector>
using namespace std;

void removeMiddleElement(vector<int>& arr,int n){


if([Link]()){
cout << "Array is empty!" << endl;
return;
}
int middleIndex = n/ 2;
for(int i=middleIndex;i<n-1;i++){
arr[i]=arr[i+1];
}
n--;
}

void printArray(const vector<int>& arr,int n){


for(int i=0;i<n;i++){
cout <<arr[i]<< " ";
}
cout << endl;
}

int main(){
vector<int> arr = {1, 2, 3, 4, 5};
cout << "Original array: ";
printArray(arr,[Link]());
removeMiddleElement(arr,[Link]());
cout << "Array after removing middle element: ";
printArray(arr,[Link]()-1);
return 0;
}

OUTPUT
Q2) WAP to delete node at a particular position from
a linked list.
#include<iostream>
#include<vector>
using namespace std;
struct Node{
int data;
Node* next;
Node(int value):data(value),next(nullptr){}
};
void removeindex(Node*& root,int i){
if(!root||i<0)return;
if(i==0){
Node* temp=root;
root=root->next;
delete temp;
return;
}
Node* current=root;
for(int index=0;index<i-1&&current->next;++index){
current=current->next;
}
if(current->next){
Node* temp=current->next;
current->next=temp->next;
delete temp;
}
}
void printList(Node* root){
while(root){
cout<<root->data<<"->";
root=root->next;
}
cout<<"nullptr"<<endl;
}
int main(){
int n;
cout<<"enter length of linked list"<<endl;
cin>>n;
vector<int> arr(n);
cout<<"enter elements"<<endl;
for(int i=0;i<n;i++){
cin>>arr[i];
}
Node* head=nullptr;
Node* tail=nullptr;
for(int value:arr){
Node* newNode=new Node(value);
if(!head){
head=newNode;
tail=newNode;
}else{
tail->next=newNode;
tail=newNode;
}
}
int index;
cout<<"enter index to remove"<<endl;
cin>>index;
cout<<"Original list:";
printList(head);
removeindex(head,index);
cout<<"After removing index "<<index<<":";
printList(head);
while(head){
Node* temp=head;
head=head->next;
delete temp;
}
return 0;
}
OUTPUT
DATE- OCTOBER 15,2025
TOPIC-STACKS
Q1) WAP to implement queues using stacks.
#include<iostream>
#include<stack>
using namespace std;
class Queue{
stack<int>s1,s2;
void enqueue(int data){
cout<<"enqueued : "<<data<<endl;
[Link](data);
}
int dequeue(){
if([Link]()){
if([Link]()){
cout<<"Queue is empty!"<<endl;
return -1;
}
while(![Link]()){
[Link]([Link]());
[Link]();
}
}
int front=[Link]();
[Link]();
return front;
}
bool isEmpty(){
return [Link]()&&[Link]();
}
friend int main();
};
int main(){
Queue q;
[Link](10);
[Link](20);
[Link](30);
cout<<"Dequeued: "<<[Link]()<<endl;
cout<<"Dequeued: "<<[Link]()<<endl;
[Link](40);
cout<<"Dequeued: "<<[Link]()<<endl;
cout<<"Dequeued: "<<[Link]()<<endl;
return 0;
}
OUTPUT
Q2)Implement MinStack using Stack
#include <stack>
#include <limits>
#include <iostream>
using namespace std;
void push(stack<int>& s, int& minEle, int val){
if([Link]()){
[Link](val);
minEle=val;
}
else if(val<minEle){
[Link](2*val-minEle);
minEle=val;
}
else{
[Link](val);
}
cout<<"Pushed:"<<val<<endl;
}
void pop(stack<int>& s, int& minEle){
if([Link]())return;
int topVal=[Link]();
[Link]();
if(topVal<minEle){
cout<<"Popped:"<<minEle<<endl;
minEle=2*minEle-topVal;
}else{
cout<<"Popped:"<<topVal<<endl;
}
}
int top(const stack<int>& s, int minEle){
if([Link]())return-1;
int topVal=[Link]();
if(topVal<minEle){
return minEle;
}
return topVal;
}
int getMin(int minEle){
return minEle;
}
int main(){
stack<int>s;
int minEle=0;
push(s,minEle,-2);
push(s,minEle,0);
push(s,minEle,-3);
cout<<"Minimum:"<<getMin(minEle)<<endl;
pop(s,minEle);
cout<<"Top:"<<top(s,minEle)<<endl;
cout<<"Minimum:"<<getMin(minEle)<<endl;
push(s,minEle,5);
push(s,minEle,-1);
cout<<"Minimum:"<<getMin(minEle)<<endl;
pop(s,minEle);
pop(s,minEle);
cout<<"Minimum:"<<getMin(minEle)<<endl;
return 0;
}

OUTPUT

You might also like