Professional Documents
Culture Documents
https://practice.geeksforgeeks.org/problems/preorder-traversal/1?
page=1&category[]=Tree&sortBy=submissions
return v;
}
_____________________________________________________________________Q.62) Inorder
traversal
https://practice.geeksforgeeks.org/problems/inorder-traversal/1?
page=1&category[]=Tree&sortBy=submissions
return v;
}
_________________________________________________________________Q.63) post order
traversal
https://practice.geeksforgeeks.org/problems/postorder-traversal/1?
page=2&category[]=Tree&sortBy=submissions
return v;
}
https://www.codingninjas.com/codestudio/problems/tree-traversal_981269?
source=youtube&campaign=Striver_Tree_Videos&utm_source=youtube&utm_medi
um=affiliate&utm_campaign=Striver_Tree_Videos&leftPanelTab=1
inorder(root,v1);
preorder(root,v2);
postorder(root,v3);
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
return v;
______________________________________________________________________________Q.64)
Height of Binary Tree
https://practice.geeksforgeeks.org/problems/height-of-binary-tree/1
____________________________________________________________________________Q.65)
Diameter of a Binary Tree
https://practice.geeksforgeeks.org/problems/diameter-of-binary-tree/1
return ans;
}
https://practice.geeksforgeeks.org/problems/check-for-balanced-tree/1
____________________Method 1 T-O(n^2)
stack<Node*> s;
s.push(root);
while(!s.empty()){
Node* temp = s.top();
s.pop();
int ansL = height(temp->left);
int ansR = height(temp->right);
if(abs(ansL-ansR)>1){
return false;
}
if(temp->right){
s.push(temp->right);
}
if(temp->left){
s.push(temp->left);
}
}
return true;
____________Method 2
return ans;
}
________________________________________________________________________________Q.6
7) Determine if Two Trees are Identical
https://practice.geeksforgeeks.org/problems/determine-if-two-trees-are-identical/1
}
_____________________________________________________________________________Q.68)
Sum tree
https://practice.geeksforgeeks.org/problems/sum-tree/1
//base case
if(root == NULL){
pair<bool,int> p = make_pair(true , 0);
return p;
}
if(root->left == NULL && root->right == NULL){
pair<bool,int> p = make_pair(true , root->data);
return p;
}
pair<bool,int> ans;
_______________________________________________________________________________Q.69
) ZigZag Tree Traversal
https://practice.geeksforgeeks.org/problems/zigzag-tree-traversal/1
while(!q.empty()){
int size = q.size();
vector<int> ans(size);
//level process
for(int i=0; i<size; i++){
Node* temp = q.front();
q.pop();
if(temp->left){
q.push(temp->left);
}
if(temp->right){
q.push(temp->right);
}
}
// direction change karni h
LeftToRight = !LeftToRight;
________________________________________________________________________________Q.7
0) Boundary Traversal of binary tree
//wapis aagya
ans.push_back(root->data);
}
//leaf
leafTraverse(root->left, ans);
leafTraverse(root->right, ans);
//right
rightTraverse(root->right, ans);
return ans;
}
_________________________________________________________________________________Q.
71) Vertical Traversal of Binary Tree
https://practice.geeksforgeeks.org/problems/print-a-binary-tree-in-vertical-order/1
if(root == NULL){
return ans;
}
q.push(make_pair(root,make_pair(0,0)));
while(!q.empty()){
pair<Node* , pair<int, int> > temp = q.front();
q.pop();
Node* frontNode = temp.first;
int hd = temp.second.first;
int lvl = temp.second.second;
nodes[hd][lvl].push_back(frontNode->data);
if(frontNode->left){
q.push(make_pair(frontNode->left, make_pair(hd-1 , lvl+1)));
}
if(frontNode->right){
q.push(make_pair(frontNode->right, make_pair(hd+1 , lvl+1)));
}
}
for(auto i : nodes){
for(auto j : i.second){
for(auto k : j.second){
ans.push_back(k);
}
}
}
return ans;
}
______________________________________________________________________Q.72) Top
View of Binary Tree
https://practice.geeksforgeeks.org/problems/top-view-of-binary-tree/1
//base case
if(root == NULL){
return ans;
}
q.push(make_pair(root,0));
while(!q.empty()){
pair<Node*,int> temp = q.front();
q.pop();
Node* frontNode = temp.first;
int hd = temp.second;
if(topNode.find(hd) == topNode.end()){
topNode[hd] = frontNode->data;
}
if(frontNode->left){
q.push(make_pair(frontNode->left,hd-1));
}
if(frontNode->right){
q.push(make_pair(frontNode->right,hd+1));
}
}
for(auto i : topNode){
ans.push_back(i.second);
}
return ans;
______________________________________________________________________________Q.73)
Bottom View of Binary Tree
https://practice.geeksforgeeks.org/problems/bottom-view-of-binary-tree/1
vector <int> bottomView(Node *root) {
map<int , int> topNode;
queue<pair<Node*, int> > q;
vector<int> ans;
//base case
if(root == NULL){
return ans;
}
q.push(make_pair(root, 0));
while(!q.empty()){
pair<Node*, int> temp = q.front();
q.pop();
Node* frontNode = temp.first;
int hd = temp.second;
topNode[hd] = frontNode->data;
if(frontNode->left){
q.push(make_pair(frontNode->left,hd-1));
}
if(frontNode->right){
q.push(make_pair(frontNode->right,hd+1));
}
}
for(auto i : topNode){
ans.push_back(i.second);
}
return ans;
__________________________________________________________________________Q.74)
Left View of Binary Tree
https://practice.geeksforgeeks.org/problems/left-view-of-binary-tree/1
}
vector<int> leftView(Node *root)
{
vector<int> ans;
solve(root, ans ,0);
return ans;
}
_____________________________________________________________________Q.75)
RightView of Binary Tree
https://practice.geeksforgeeks.org/problems/right-view-of-binary-tree/1
_______________________________________________________________________Q.77) Sum of
the Longest Bloodline of a Tree (Sum of nodes on the longest path from root to leaf
node)
https://practice.geeksforgeeks.org/problems/sum-of-the-longest-bloodline-of-a-
tree/1
void solve(Node* root, int len, int &maxLen, int sum, int &maxSum){
// base case
if(root == NULL){
if(len > maxLen){
maxLen = len;
maxSum = sum;
}
else if(len == maxLen){
maxSum = max(sum,maxSum);
}
return;
}
sum = sum + root->data;
return maxSum;
}
_____________________________________________________________________________Q. 78)
Lowest Common Ancestor in a Binary Tree
https://practice.geeksforgeeks.org/problems/lowest-common-ancestor-in-a-binary-
tree/1
___________________________________________________________________Q.80) Kth
Ancestor in a Tree
https://practice.geeksforgeeks.org/problems/kth-ancestor-in-a-tree/1
_________________________method 2
____________________________________________________________________________Q.81)
Maximum sum of Non-adjacent nodes
https://practice.geeksforgeeks.org/problems/maximum-sum-of-non-adjacent-nodes/1
return result;
ans = solve(root);
return max(ans.first, ans.second);
}
______________________________________________________________________Q.82)
Construct Tree from Inorder & Preorder (partial correct)
https://practice.geeksforgeeks.org/problems/construct-tree-1/1
Node* solve(int in[],int pre[], int n, int &index, int inStart, int inEnd,
map<int, int> &nodeToInsert){
// base case
if(index >= n || inStart > inEnd){
return NULL;
}
return root;
return ans;
}
________________________________________________________________________________Q.8
3) Tree from Postorder and Inorder
https://practice.geeksforgeeks.org/problems/tree-from-postorder-and-inorder/1
Node* solve(int in[],int post[], int n, int &index, int inStart, int inEnd,
map<int, int> &nodeToInsert){
// base case
if(index < 0 || inStart > inEnd){
return NULL;
}
return root;
return ans;
}
___________________________________________________________________________________
Q.84) Burning Tree
https://practice.geeksforgeeks.org/problems/burning-tree/1
queue<Node*> q;
q.push(root);
nodeToParent[root] = NULL;
while(!q.empty()){
Node* front = q.front();
q.pop();
if(front->data == target){
res = front;
}
if(front->left){
nodeToParent[front->left] = front;
q.push(front->left);
}
if(front->right){
nodeToParent[front->right] = front;
q.push(front->right);
}
}
return res;
q.push(root);
visited[root] = 1;
int ans = 0;
while(!q.empty()){
bool flag = 0;
int size = q.size();
for(int i=0; i<size; i++){
Node* front = q.front();
q.pop();
if(flag == 1){
ans++;
}
}
return ans;
}
_____________________________________________________________________________Q.85)
Flatten binary tree to linked list
https://practice.geeksforgeeks.org/problems/flatten-binary-tree-to-linked-list/1
https://www.codingninjas.com/codestudio/problems/search-in-bst_1402878?
leftPanelTab=0
__________________________recursion
if(root == NULL){
return false;
}
if(root->data == x){
return true;
}
____________________________iterative
______________________________________________________________________________Q.
87) Partial BST/ Is BST
https://www.codingninjas.com/codestudio/problems/validate-bst_799483?leftPanelTab=0
__________________________________________________________________Q.88)Find K-th
smallest Element in BST
https://www.codingninjas.com/codestudio/problems/find-k-th-smallest-element-in-
bst_1069333?leftPanelTab=0
solve(root->left, v);
v.push_back(root->data);
solve(root->right,v);
vector<int> v;
solve(root, v, k);
if(k>v.size()){
return -1;
}
else{
return v[k-1];
}
}
_____________________________recursion
_______________________________________________________________________________Q.89
) Predecessor And Successor In BST
https://www.codingninjas.com/codestudio/problems/_893049?topList=love-babbar-dsa-
sheet-problems&leftPanelTab=0
pair<int, int> p;
p.first = pred;
p.second = succ;
return p;
______________________________________________________________________________Q.90)
LCA of Two Nodes In A BST
________________________recursion
if(root == NULL){
return NULL;
}
if(P->data > root->data && Q->data > root->data){
return LCAinaBST(root->right, P, Q);
}
else if(P->data < root->data && Q->data < root->data){
return LCAinaBST(root->left, P, Q);
}
else{
return root;
}
_________________iterative
if(root == NULL){
return NULL;
}
while(root != NULL){
if(P->data > root->data && Q->data > root->data){
root = root->right;
}
else if (P->data < root->data && Q->data < root->data) {
root = root->left;
}
else{
return root;
}
}
___________________________________________________________________________________
Q.91) Two Sum IV - Input is a BST
https://www.codingninjas.com/codestudio/problems/two-sum-in-a-bst_1062631?
leftPanelTab=0
inorder(root->left, v);
v.push_back(root->data);
inorder(root->right, v);
int i = 0;
int j = v.size()-1;
while(i<j){
int sum = v[i] + v[j];
if(sum == target){
return true;
}
else if(sum > target){
j--;
}
else{
i++;
}
}
return false;
}
___________________________________________________________________________________
__Q.92) Flatten BST To A Sorted List
https://www.codingninjas.com/codestudio/problems/flatten-bst-to-a-sorted-
list_1169459?leftPanelTab=0
______________________________partial
__________________________________________correct
return startRoot;
}
_______________________________________________________________________Q.93) Normal
BST To Balanced BST
https://www.codingninjas.com/codestudio/problems/normal-bst-to-balanced-bst_920472?
leftPanelTab=0
_______________________________________________________________________Q.94)
Preorder traversal of a BST
https://www.codingninjas.com/codestudio/problems/preorder-traversal-to-bst_893111?
leftPanelTab=0
int i = 0;
return solve(preorder, mini, maxi, i);
________________________________________________________________________Q.95) Merge
Two BSTs
https://www.codingninjas.com/codestudio/problems/h_920474?
leftPanelTab=0&utm_source=youtube&utm_medium=affiliate&utm_campaign=Lovebabbar
_______________________________Approach 1
inorder(root1, v1);
inorder(root2, v2);
____________________________Approach 2
convertIntoSortedDLL(root->left, head);
// merge sorted ll
TreeNode<int>* head = mergeLinkedList(head1, head2);
_________________________________________________________________________________Q.
96) Size of Largest BST in Binary Tree
https://www.codingninjas.com/codestudio/problems/largest-bst-subtree_893103?
leftPanelTab=0&utm_source=youtube&utm_medium=affiliate&utm_campaign=Lovebabbar
class info{
public:
int mini;
int maxi;
bool isBST;
int size;
};
info currNode;
// answer update
if(currNode.isBST){
ans = max(ans, currNode.size);
}
return currNode;
}