Тёмный

L21. Vertical Order Traversal of Binary Tree | C++ | Java 

take U forward
Подписаться 630 тыс.
Просмотров 291 тыс.
50% 1

Entire DSA Course: takeuforward.org/strivers-a2z...
Check our Website:
Linkedin/Instagram/Telegram: linktr.ee/takeUforward
#treeSeries #striver #placements

Опубликовано:

 

4 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 419   
@takeUforward
@takeUforward 2 года назад
Please likeeee, shareeee and subscribeeeeeeee :) Also follow me at Insta: Striver_79
@ng3w462
@ng3w462 2 года назад
Bhaiya bhaiya 🤟🤟
@deepanshjohri3997
@deepanshjohri3997 9 месяцев назад
Did by applying all the traversal techniques : Thanks Striver a lot 🙂 class Solution { public: void postOrder(TreeNode* root,map &mapping,int vertical,int level) { if(root==nullptr)return; if(root->left)postOrder(root->left,mapping,vertical-1,level+1); if(root->right)postOrder(root->right,mapping,vertical+1,level+1); mapping[vertical][level].insert(root->val); } void inOrder(TreeNode* root,map &mapping,int vertical,int level) { if(root==nullptr)return; if(root->left)postOrder(root->left,mapping,vertical-1,level+1); mapping[vertical][level].insert(root->val); if(root->right)postOrder(root->right,mapping,vertical+1,level+1); } void preOrder(TreeNode* root,map &mapping,int vertical,int level) { if(root==nullptr)return; mapping[vertical][level].insert(root->val); if(root->left)postOrder(root->left,mapping,vertical-1,level+1); if(root->right)postOrder(root->right,mapping,vertical+1,level+1); } void levelOrder(TreeNode* root,map &mapping) { if(root==NULL)return; queue queue; queue.push({root,{0,0}}); while(!queue.empty()) { int size=queue.size(); for(int i=0;ival); if(node->left)queue.push({node->left,{vertical-1,level+1}}); if(node->right)queue.push({node->right,{vertical+1,level+1}}); } } } vector verticalTraversal(TreeNode* root) { if(root==nullptr)return {}; map mapping; /* using preOrder Traversal preOrder(root,mapping,0,0); using inOrder Traversal inOrder(root,mapping,0,0); using postOrder Traversal postOrder(root,mapping,0,0); using level order Traversal */ levelOrder(root,mapping); vector answers; for(auto mapp:mapping) { vector answer; for(auto tt:mapp.second) for(auto inner:tt.second) answer.push_back(inner); answers.push_back(answer); } return answers; } };
@KanhaiyaLal-yv3sq
@KanhaiyaLal-yv3sq 15 дней назад
i done ,All
@vashishthsharma4411
@vashishthsharma4411 Год назад
if you are solving this problem on GFG change two things 1. instead of using multiset use a vector. 2. copy the vector of vector (ans) into a 1d vector ,return the 1d vector. at last thank u Raj bhaiya , great work.
@sidarthroy815
@sidarthroy815 Год назад
any reason for not using multiset?
@vashishthsharma4411
@vashishthsharma4411 Год назад
@@sidarthroy815 on gfg we have to return a vector ,that's the reason .
@vashishthsharma4411
@vashishthsharma4411 Год назад
@@sidarthroy815 visit this question on gfg
@ravindrabarthwal
@ravindrabarthwal 2 года назад
I'm enrolled in Coding Ninjas Competitive Programming Premium course. Your content has much more depth than CN.
@divyanshuchaudhari3257
@divyanshuchaudhari3257 2 года назад
CN is overrrrrrated
@ravindrabarthwal
@ravindrabarthwal 2 года назад
@@divyanshuchaudhari3257 the content is good but still has many shortcomings regarding platform and services.
@gowreeManohar
@gowreeManohar 2 года назад
@@ravindrabarthwal how much it costs?
@siddharth7261
@siddharth7261 2 года назад
In their CP course, they don't have any module on binary trees and binary search trees.
@Zunan263
@Zunan263 2 года назад
@@gowreeManohar don't buy man litreally even I experienced buy nothing from Coding ninjas I buyed 16k web dev course it's totally not worth even content is not there totally for a student worst platform coding ninjas
@MischievousSoul
@MischievousSoul 10 месяцев назад
One of the hardest question in the whole playlist.. Took a whole day to understand and write the code.. But ig its fair to not rush and just devote the req time to some questions..
@AppaniMadhavi
@AppaniMadhavi 5 месяцев назад
yess, I tried on my own upto some extent but wasted 6-7 hours, really amazing problem
@valdidar
@valdidar Месяц назад
took me 50 minutes of hardcore focus to solve this one, and still was only able to beat 6% all Solution time. Also had to look syntax 2 or 3 times. very difficult problem indeed.
@anonymousvoid6356
@anonymousvoid6356 2 года назад
Hey everyone! Welcome back to the channel. I hope you guys are doing well! My mind gets fresh whenever i hear this from strivers mouth.
@014_anurag2
@014_anurag2 2 года назад
Wow after this wonderful explanation!! preorder approach became too easy. Here is the code :- void preorder(TreeNode* node,int vertical,int level,map &nodes){ if(node == nullptr) return; nodes[vertical][level].insert(node->val); preorder(node->left,vertical-1,level+1,nodes); preorder(node->right,vertical+1,level+1,nodes); } vector verticalTraversal(TreeNode* root) { map nodes; preorder(root,0,0,nodes); vector ans; for(auto p:nodes){ vector col; for(auto q:p.second){ col.insert(col.end(),q.second.begin(),q.second.end()); } ans.push_back(col); } return ans; }
@codding32world50
@codding32world50 Год назад
CAN you explain col.insert(col.end(),q.second.begin(),q.second.end()); this line plzz bro
@sageoustheory1957
@sageoustheory1957 Год назад
@@codding32world50 yeah this line is confusing
@mjmusic65
@mjmusic65 Год назад
@@codding32world50 this means you are inserting all the elements of multimap at the end of the col vector
@aayushgoswami8632
@aayushgoswami8632 2 месяца назад
for(auto p:nodes){ vectorcol; for(auto q:p.second){ for(int it: q.second){ col.push_back(it); } } ans.push_back(col); } use this if u didin't understood col.insert thing.
@dhanushrajan6280
@dhanushrajan6280 18 дней назад
thanks man
@soumikdutta7867
@soumikdutta7867 2 года назад
The GFG variant of this question is a bit easy. In the GFG variant you don't need to sort the elements, just add the elements in the ans. as it is in the tree.
@atulwadhwa192
@atulwadhwa192 Год назад
why can't we use inorder for the gfg probem? My Tc are not getting passed in GFG private: void preOrder(Node* node,int col,map &mp){ if(node==nullptr){ return; } if(mp.find(col)==mp.end()){ mp[col]={node->data}; } else mp[col].push_back(node->data); // or mp[col].push_back() if(node->left!=nullptr) preOrder(node->left,col-1,mp); if(node->right!=nullptr) preOrder(node->right,col+1,mp); } public: //Function to find the vertical order traversal of Binary Tree. vector verticalOrder(Node *root) { map mp; preOrder(root,0,mp); vector ans; //traverse in map and store it in ans; say ans.push_back(mp[0]) and so on..... for(auto it:mp){ // sort(it.second.begin(),it.second.end()); for(auto ele:it.second){ ans.push_back(ele); } } return ans; }
@vijaymalviya23
@vijaymalviya23 11 месяцев назад
@@atulwadhwa192 For each vertical level, your vector should be filled from top to bottom, this thing will not happen with this code
@nopecharon
@nopecharon 2 года назад
4:37 There is a small typo, the co-ordinates of the rightmost node is actually (2, 2) not (1, 2)
@jewelchowdhury9752
@jewelchowdhury9752 Год назад
you are correct..
@dom47
@dom47 Год назад
nah striver is just testing us if we are paying attention
@SomanAnshuman
@SomanAnshuman 4 месяца назад
@@dom47 "not a bug, but a feature" type comment 😂
@gitanjalikumari9262
@gitanjalikumari9262 Год назад
Thank you so much for explaining the C+++ code..after lot of searching I found this video and it's awesome
@dikshasoni52a98
@dikshasoni52a98 2 месяца назад
i think this is the hardest question of this playlist till now...... it really required like 1 day to understand this and code it.
@cinime
@cinime Год назад
Understood! Such an amazing explanation as always, thank you very much!!
@lone_wolf7721
@lone_wolf7721 2 года назад
man the explaination is masterclass.. hats off to you .. at first i have a problem but as you suggested to dry run i have done and now its crystal clear
@fahrenheit2109
@fahrenheit2109 2 года назад
absolutely amazing explanation, learned a lot more than tree traversal in this video (my STL is not the best)
@vaibhavsingh4108
@vaibhavsingh4108 Год назад
same brother
@subhamtulshan4023
@subhamtulshan4023 2 года назад
Here the Time Complexity will be o(nlogN) , as we are using TreeMap and each operation in treeMap takes logN time. We can use DLL to solve it in O(N). where each node in DLL is like (data -> list of element, next -> points to the next verticle, prev-> points to the previous vertical)
@knowledgeworld6951
@knowledgeworld6951 Год назад
Or unordered map and queue
@Dipanshutripathi2407
@Dipanshutripathi2407 10 месяцев назад
Before wathcing the video I could not solve the problem by looking the solution but after watching video i could solve the problem on my own .
@rishabhkumar8115
@rishabhkumar8115 2 года назад
Got the whole approach...but struggling with the last part, which is traversing the priority queue and adding into arraylist.
@pranavmisra5870
@pranavmisra5870 Месяц назад
Brilliant explanation and hats off to whoever though of this solution.
@harshbhagwani7769
@harshbhagwani7769 2 года назад
PYTHON SOLN FOR VERTICAL ORDER TRAVERSAL class Solution: def __init__(self): self.values={} def vertical_order(self,root,x,y): if root is None : return if x in self.values : self.values[x].append((y,root.val)) else : self.values[x]=[(y,root.val)] self.vertical_order(root.left,x-1,y+1) self.vertical_order(root.right,x+1,y+1) def verticalTraversal(self, root: Optional[TreeNode]) -> List[List[int]]: self.vertical_order(root,0,0) result=[] for x in sorted(self.values.keys()): column=[i[1] for i in sorted(self.values[x])] result.append(column) return result
@iamnottech8918
@iamnottech8918 Месяц назад
now I know why some said donot use java for cp ,c++ is a life saver
@ishangujarathi10
@ishangujarathi10 Год назад
you make leetcode hard problems easy to understand!!!! tysm
@rohan8758
@rohan8758 9 часов назад
Understood, great explanation Striver!
@chirag6475
@chirag6475 Месяц назад
Thank you Striver Bhaiya. You're a inspiration to me.
@rushidesai2836
@rushidesai2836 Месяц назад
Good question. Its mostly about visualizing how the node data is stored in the root map.
@chandrachurmukherjeejucse5816
Solved myself without watching the solution using map of map. got a dopamine hit. Thanks striver.
@jashanbansal2613
@jashanbansal2613 2 года назад
Can be solved using map We r going level by level only, so nodes would be inserted from top to bottom, therefore no need to maintain level
@takeUforward
@takeUforward 2 года назад
Vector will distort the sorted wala property..
@jashanbansal2613
@jashanbansal2613 2 года назад
@@takeUforward We r going level by level, first it will push_back node at level 0, then for level 1, then for level 2 and so on.. So by default it's in order. U can check it once again, otherwise I will post code tomorrow
@takeUforward
@takeUforward 2 года назад
@@jashanbansal2613 if in the same vertical, and same level you have 9 first and then 8, your vector will store 9,8 But should be 8,9 :)
@jashanbansal2613
@jashanbansal2613 2 года назад
@@takeUforward Thanks for taking time to reply Man :)
@AyushGupta-kp9xf
@AyushGupta-kp9xf 2 года назад
@@takeUforward bhaiya if we iterate from backwards while traversing in the map finally, will that work ?
@Negijicoder
@Negijicoder 22 дня назад
i've done it myself by using bfs(level order) and preorder..(dfs, and used tuple to store all values.. like vector vec; )
@namankeshari7332
@namankeshari7332 Год назад
Thank you so much! This video is a life saver! Thanks again man!!
@codeman3828
@codeman3828 4 месяца назад
Understood. Great video
@tusharnain6652
@tusharnain6652 2 года назад
Thank you STRIVER for this amazing series, and a little bit thanks to RELEVEL.
@Weirdvloggertrue
@Weirdvloggertrue 2 года назад
Great explaination!❤️ Waiting for BSTs... 😌
@sudhanshukumar3391
@sudhanshukumar3391 2 года назад
I understand this question partially. When i understand the problem statement , then at same moment I guessed that this problem would be leetcode hard category, And yes it is.
@albatrossgeez6637
@albatrossgeez6637 8 месяцев назад
understood.................thanks bhaiya for the amazing videos
@symbol767
@symbol767 2 года назад
I did this in Python. I used minHeap with a tuple, I thought I had to make a class to modify/overload some minHeap functionality, but I didn't need to. So you can just use a minHeap without making a new "VerticalLevel" class class VerticalLevel: def __init__(self): self.minHeap = []; def add(self, val, level): heapq.heappush(self.minHeap, (val, level)); def remove(self): return heapq.heappop(self.minHeap); class Solution: def verticalTraversal(self, root: Optional[TreeNode]) -> List[List[int]]: result = []; queue = deque(); queue.append((root, 0, 0)); verticalHeap = {}; minLevel = float('inf'); maxLevel = -float('inf'); while len(queue) > 0: levelSize = len(queue); for _ in range(levelSize): node, level, vertical = queue.popleft(); minLevel = min(minLevel, vertical); maxLevel = max(maxLevel, vertical); if vertical not in verticalHeap: verticalHeap[vertical] = VerticalLevel(); verticalHeap[vertical].add(level, node.val) if node.left: queue.append((node.left, level + 1, vertical - 1)); if node.right: queue.append((node.right, level + 1, vertical + 1)); for level in range(minLevel, maxLevel + 1): print(level) currentLevel = verticalHeap[level]; # Pop all elements off the modified minHeap and add it into a tempLevel array tempLevel = []; while len(currentLevel.minHeap) > 0: level, value = currentLevel.remove(); tempLevel.append(value); # Now append the tempLevel array into the result array result.append(tempLevel); return result;
@Progamer-fq8st
@Progamer-fq8st Год назад
We can also use map
@mriduljain1981
@mriduljain1981 Год назад
i did the 90% question myself i just couldnot find out which datastructure to use i am super happy about it ..................
@darshansurana7331
@darshansurana7331 2 года назад
In this video The time Complexity is (Addition of LogN)-> O((LogN + LogN + LogN) * N) and not (Multiplication of LogN)-> O((LogN * LogN * LogN) * N) first LogN for first map, second LogN for second map and third LogN for the multiset and this is done for all N elements so multiply by N. Am I Correct ?
@sahilkumarsingh8517
@sahilkumarsingh8517 2 года назад
Understood 😁 //using inOrder Traversal code class Solution { public: void inOrder(TreeNode* root, int x, int level, map &map) { if(root==NULL) return; inOrder(root->left, x-1, level+1, map); map[x][level].insert(root->val); inOrder(root->right, x+1, level+1, map); } vector verticalTraversal(TreeNode* root) { if(root == NULL) return {}; map map; inOrder(root, 0, 0, map); vector ans; for(auto it:map) { vector col; for(auto p:it.second) col.insert(col.end(), p.second.begin(), p.second.end()); ans.push_back(col); } return ans; } };
@sawantanand3681
@sawantanand3681 2 года назад
col.insert(col.end(), p.second.begin(), p.second.end()); please explain this line
@shauryashekhar
@shauryashekhar 2 года назад
@@sawantanand3681 basically you are adding at the end of your vector "col" map.first.begin ie say you have an element {1,2} in the map inside the outer map you declared...then map.first.begin refers to 1 and map.first.end refers to 2. Alternatively you can do it this way if you want for(auto q: p.seond) //so q refers to your multiset now while p was referring to your map above. {col.push_back(q)}; } ans.push_back(col); } return ans; } };
@virusdgamer8804
@virusdgamer8804 Год назад
@@shauryashekhar what if there is only 1 element on a level and not two? will the map.first.begin and map.first.end both not print the same value twice because both the pointers will be on the same value?!?
@vijaykumarsanugonda2784
@vijaykumarsanugonda2784 Год назад
which data structure will be used to store the node.value,y,x in python language?
@peter9759
@peter9759 Год назад
Lovely explanation yaar itne pyaar se kisi ne nhi sikhaaya
@stylewithsmriti
@stylewithsmriti 2 года назад
This approach takes O(n*logn) time complexity. Can you please make a video on efficient solution that takes O(n)?
@JohnWick-kh7ow
@JohnWick-kh7ow 2 года назад
Why time complexity is O(N*logn)? we are using map > So it should be O(N*logN*logN*logN). please explain.
@takeUforward
@takeUforward 2 года назад
Correct bro, i have assumed map to work as o(1) due to java
@JohnWick-kh7ow
@JohnWick-kh7ow 2 года назад
@@takeUforward Ok, got it.
@sans.creates
@sans.creates 2 года назад
@@JohnWick-kh7ow so what would it actually be for C++ solution?
@JohnWick-kh7ow
@JohnWick-kh7ow 2 года назад
@@sans.creates O(N*logN*logN*logN) will be time complexity for C++ solution. We are using two maps and one multiset and we are traversing each node.
@divyambhutani6229
@divyambhutani6229 2 года назад
Shouldnt the time complexity be same for Java because TreeMap also takes O(logn)??
@naro.tam_
@naro.tam_ 2 года назад
What a great explanation 🙏🙏🙏🙏🙏
@bestdeal3385
@bestdeal3385 2 года назад
for those having difficulty in the last part can use this code segment ( just elaborated a bit for easy understanding ) 😊😊 vector ans; for(auto it:m) { vector v; for(auto t:it.second) { for(auto x:t.second) { v.push_back(x); } } ans.push_back(v); } return ans; }
@jaspreetmehra572
@jaspreetmehra572 2 года назад
mapnodes; nodes[x][y].push_back(head->data); Can you explain how the value is getting stored? I am not getting how this statement "nodes[x][y].push_back(head->data);" is working internally? TIA
@madhabkafle8898
@madhabkafle8898 2 года назад
@@jaspreetmehra572 if you use this statement then the node will get inserted in its (vertical,level) , u might not understand what i have typed xD, but once visualise x and y ...x=p.second.first ,y=p.second.second ,u might understand
@jerryraphy739
@jerryraphy739 2 года назад
@XanderSR
@XanderSR Месяц назад
This code is wrong bro. It will include values with same level and vertical but doesn't include values with same vertical and different levels in a same array.
@Ramu9119
@Ramu9119 7 месяцев назад
Nice Explanation
@ritikshandilya7075
@ritikshandilya7075 2 месяца назад
superb explanation
@babulalyadav4305
@babulalyadav4305 Месяц назад
00:02 Introduction to vertical order traversal in binary tree 02:13 Understand the concept of vertical order traversal in a binary tree 04:32 Traversing and assigning verticals and levels to every node 06:39 Using multiset to store multiple notes for each level 08:51 Understanding the vertical order and level change during level order traversal 10:49 Vertical order traversal involves tracking node positions 12:49 Storing vertical orders using data structures 15:04 Explaining vertical order traversal in Java 17:00 Explanation of time and space complexity for vertical order traversal 18:38 Subscribe for upcoming series Crafted by Merlin AI.
@AdityaKumar-be7hx
@AdityaKumar-be7hx Год назад
Could we have just used "mapint>> nodes"?
@Pooja-lm5yj
@Pooja-lm5yj 3 месяца назад
it's not allowed because std::map keys must be of a type that supports comparison for equality and ordering.
@shreyasharma7987
@shreyasharma7987 Год назад
What is the significance of storing the level? we can just use the vertical indexing to store the elements.
@shivanisisodia6189
@shivanisisodia6189 Год назад
thankgod first time he has taken Queue diagram as a queue not as a stack like in other videos, there is so much confusion bcoz of that and difficult to remember also for future.
@SushilKumar-es9ib
@SushilKumar-es9ib 2 года назад
Great explaination🤩
@bhashkarbelwal4116
@bhashkarbelwal4116 5 месяцев назад
what an easy clarification yar man
@lucifersamrat6280
@lucifersamrat6280 2 дня назад
tough but it was very great explanation
@sanjayp.m7008
@sanjayp.m7008 7 дней назад
can just use a pqval>> and perform a dfs traversal and push all the elements updating the col and row and finally pop from the pq and push into ans and return ans, :)
@lifehustlers164
@lifehustlers164 11 месяцев назад
Completed 22/54(40% done) !!!
@ganeshjaggineni4097
@ganeshjaggineni4097 18 дней назад
NICE SUPER EXCELLENT MOTIVATED
@nagavedareddy5891
@nagavedareddy5891 2 года назад
Huge respect...❤👏
@coding8000
@coding8000 Год назад
Understooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooood, Ctr + right arrow, for shifting the chapter of ads in video
@SumitKeshariMCS
@SumitKeshariMCS Год назад
Solved on my own. Then watched your video. Thanks striver for quality content. here is my code: class Solution { public: vector verticalTraversal(TreeNode* root) { vectorans; if(root==NULL) return ans; queueq; q.push({0,{0,root}}); mapmp; while(!q.empty()) { auto it = q.front(); q.pop(); int hd = it.first; int level = it.second.first; TreeNode* node = it.second.second; mp[hd][level].insert(node->val); if(node->left) q.push({hd-1,{level+1,node->left}}); if(node->right) q.push({hd+1,{level+1,node->right}}); } for(auto it = mp.begin();it!=mp.end();it++) { vectortemp; for(auto i = it->second.begin();i!=it->second.end();i++) { for(auto ii = i->second.begin();ii!=i->second.end();ii++) { temp.push_back(*ii); } } ans.push_back(temp); } return ans; } };
@anmolswarnkar7707
@anmolswarnkar7707 2 года назад
I was able to solve this one myself, but instead of using multisets, I sorted the individual columns later (based on the values of nodes on the same level).
@tharundharmaraj9045
@tharundharmaraj9045 Год назад
Can u pls share?
@DimensionalDriftYoru
@DimensionalDriftYoru Год назад
@@tharundharmaraj9045 I did the similar thing void preorder(TreeNode* root,int curr,int ver,unordered_map &m){ if(!root) return; m[curr].push_back({ver,root->val}); preorder(root->left,curr-1,ver+1,m); preorder(root->right,curr+1,ver+1,m); } vector verticalTraversal(TreeNode* root) { unordered_map m; preorder(root,0,0,m); vector v; for(auto i:m){ v.push_back({i.first,i.second}); } sort(v.begin(),v.end()); vector ans; for(auto i:v){ vector temp; sort(i.second.begin(),i.second.end()); for(auto j:i.second){ temp.push_back(j.second); } ans.push_back(temp); } return ans; }
@RahulSingh-vv9jj
@RahulSingh-vv9jj 2 года назад
Awesome Explanation Bhaiya
@shubhamagrawal22124
@shubhamagrawal22124 Год назад
Suggest you to keep meaningful variable names. Anyways thanks for all your content, really helpful.
@vakhariyajay2224
@vakhariyajay2224 Год назад
Thank you very much. You are a genius.
@lavanyaprakashjampana933
@lavanyaprakashjampana933 Год назад
we love your content and we love you....🖤
@karankapoor6145
@karankapoor6145 2 года назад
In c++ code line no. 26 , how are we making sure that when two or more complete multiset items are inserted in a column , the column will have sorted elements? Multisets contain sorted elements but when two or more multiset contents are pushed into a vector one after the other, the resulting vector might not be sorted.
@Gaurav-fb9ds
@Gaurav-fb9ds Год назад
vector < vector < int >> ans; for (auto p: nodes) { vector < int > col; for (auto q: p.second) { col.insert(col.end(), q.second.begin(), q.second.end()); } ans.push_back(col); } Can someone explain this?
@user-tk2vg5jt3l
@user-tk2vg5jt3l 4 месяца назад
Thank you Bhaiya
@mayurbhor2231
@mayurbhor2231 2 года назад
The problem can be solved in O(N) time without multiset , if the order of overlapping elements is not necessary to be in ascending order
@adityasai550
@adityasai550 2 года назад
Yeah I think then we just need to use map
@tushar7305
@tushar7305 Год назад
What is order of overlapping ?
@ravalikatalks5285
@ravalikatalks5285 6 месяцев назад
thanks alot!
@tanaysingh5348
@tanaysingh5348 Год назад
thanks for such quality content
@surbhirathore._
@surbhirathore._ Месяц назад
Understood ❤❤
@user-lg1vw7hc1g
@user-lg1vw7hc1g Месяц назад
can we solve this qs without level and just by using vertical, node ?
@Satyendra_Prakash17
@Satyendra_Prakash17 2 месяца назад
my saved notes are not showing in atoz sheet. And on opening it from saved notes on website , the notes are not correctly placed like how i had originally wrote it and some content from it is also missing . If Anyone knows how to fix it please help.
@noobchess2516
@noobchess2516 8 месяцев назад
easy solution that you can understand using custom data structure . idea - custom datastructure to store node value, x,y coordinate and then sort it as per our required . (sort in termss of x coordinate if same, sort in terms of y coordinate, if same ,value compare all in ascending order) then just return vector. struct point{ int value; int x; int y; }; void travel(TreeNode*root,int x,int y,vector&save){ if(root==NULL){ return; } point a ; a.value=root->data; a.x =x; a.y=y; save.push_back(a); travel(root->left,x-1,y+1,save); travel(root->right,x+1,y+1,save); } bool compare(point a,point b){ if(a.x!=b.x){ return a.x
@ApnaVlogs-tj7do
@ApnaVlogs-tj7do 9 месяцев назад
Legend ❤‍🔥
@herculean6748
@herculean6748 Год назад
Can someone please explain this a bit (Inner for loop, how many times will it run) for (auto p: nodes) { vector < int > col; for (auto q: p.second) { col.insert(col.end(), q.second.begin(), q.second.end()); } ans.push_back(col); }
@rishabhgupta9846
@rishabhgupta9846 Год назад
for (auto q: p.second) will run number of horizontal levels we have whereas col.insert(col.end(), q.second.begin(), q.second.end()) will insert number of elements which are present on [vertical level] [horizontal level]
@rishabhgupta9846
@rishabhgupta9846 Год назад
can also do this way vector res; for (auto itr1 = nodes.begin(); itr1 != nodes.end(); itr1++) { vector temp; for (auto itr2 = itr1->second.begin(); itr2 != itr1->second.end(); itr2++) { for (auto itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++) { temp.push_back(*itr3); } } res.push_back(temp); } return res;
@amartyapatil4124
@amartyapatil4124 2 года назад
@take U forward you need to make change in java tuple and code since we need to sort the priorityQueue based on y not based on x Here iscode with changes. class Tuple{ TreeNode node; int row; int col; public Tuple(TreeNode _node,int _row,int _col){ this.node=_node; this.col=_col; this.row=_row; } } class Solution { public List verticalTraversal(TreeNode root) { TreeMap map=new TreeMap(); List vertical=new ArrayList(); Queue q=new LinkedList(); q.offer(new Tuple(root,0,0)); while(!q.isEmpty()){ Tuple tuple=q.poll(); TreeNode node=tuple.node; int x=tuple.col; int y=tuple.row; if(!map.containsKey(x)){ map.put(x,new TreeMap()); } if(!map.get(x).containsKey(y)){ map.get(x).put(y,new PriorityQueue()); } map.get(x).get(y).add(node.val); if(node.left!=null){ q.offer(new Tuple(node.left,y+1,x-1)); } if(node.right!=null){ q.offer(new Tuple(node.right,y+1,x+1)); } } for(TreeMap ys:map.values()){ vertical.add(new ArrayList()); for(PriorityQueue nodes:ys.values()){ while(!nodes.isEmpty()){ vertical.get(vertical.size()-1).add(nodes.poll()); } } } return vertical; } }
@codingp110
@codingp110 Месяц назад
understood!
@sriharithakancharla5443
@sriharithakancharla5443 7 месяцев назад
in c++ code line 24 why should we use insert y not push_back?
@nikharbehera5613
@nikharbehera5613 5 месяцев назад
we can also use map> nodes where nodes.first will represent vertical lines and multiset stores all the corresponding nodes (no need to keep track for level) am i right ??
@XanderSR
@XanderSR Месяц назад
No because at time of insertion you need to maintain level also and there can be more than one values of vertical lines at a particular level.
@harshdeepak3281
@harshdeepak3281 2 года назад
hey striver why col.push_back didnt worked in case of vector here?? why we used insert function?
@utkarshsharma6650
@utkarshsharma6650 2 года назад
a bit difficult, but still understood :-/ will come back on it again
@sahilgupta9263
@sahilgupta9263 2 года назад
why we are inserting q.second using col.end() in col.insert(col.end(),q.second,begin(),q.second.end()) ?
@tanujchaniyari6005
@tanujchaniyari6005 2 года назад
Thank you Raj Bhaiya
@siddharthsaxena6495
@siddharthsaxena6495 2 года назад
In GFG they are taking map instead of map. Can u please tell me why and whats the difference??
@takeUforward
@takeUforward 2 года назад
It won’t store sorted na if on a level there are multiple overlap.
@kanhaiyatulsyan7560
@kanhaiyatulsyan7560 2 года назад
i think they are not storing level also they are only storing vertices(-1,0,+1..) and the nodes at respective vertices
@firdouszoyakhan9404
@firdouszoyakhan9404 24 дня назад
instead of multiset can we use vector?
@111rhishishranjan2
@111rhishishranjan2 Год назад
I was saying if let say we take down with -ve y axis of for node value 2 , we must store (2,-1,-1) .
@subodh.r4835
@subodh.r4835 2 года назад
Extremely easy explanation for a leetcode hard level question!
@harish5466
@harish5466 Год назад
why cant we use datastructure like map?
@supratimbhattacharjee5324
@supratimbhattacharjee5324 2 года назад
class Solution { public: void dfs(TreeNode* root,int wide,int level,map& mp) { mp[wide][level].insert(root->val); if(root->left) dfs(root->left,wide-1,level+1,mp); if(root->right) dfs(root->right,wide+1,level+1,mp); } vector verticalTraversal(TreeNode* root) { map mp; vector ans; if(root==nullptr) return ans; int level=0; int wide=0; dfs(root,wide,level,mp); for(auto x: mp) { vector temp; for(auto i:x.second) for(auto y: i.second) temp.push_back(y); ans.push_back(temp); } return ans; } };
@ShivamKanojia-oz8ph
@ShivamKanojia-oz8ph Месяц назад
Using Inorder class Solution { public: void traversal(TreeNode* root, int vertical, int level, map &nodes) { if (root == NULL) return; traversal(root->left, vertical - 1, level + 1, nodes); nodes[vertical][level].insert(root->val); traversal(root->right, vertical + 1, level + 1, nodes); } vector verticalTraversal(TreeNode* root) { vector ans; map nodes; traversal(root, 0, 0, nodes); for (auto i : nodes) { vector col; for (auto j: i.second) { col.insert(col.end(), j.second.begin(), j.second.end()); } ans.push_back(col); } return ans; } };
@suryamanisudhakar5743
@suryamanisudhakar5743 2 года назад
if(node->left) q.push({node->left,{x-1,y+1}}); While pushing the updated position of vertical and level in the queue I am using x-- and y++ in the place of x-1 and y+1(for both left and right node). But It is giving me the wrong answer. Can somebody help me out.
@shubhamaswal1993
@shubhamaswal1993 2 года назад
you should use - - x and ++y
@alesblaze4745
@alesblaze4745 2 года назад
Thanks a lot mate!
@nischayagrawalVlogs
@nischayagrawalVlogs 10 месяцев назад
at 1:30 , How come 1 , 10 , 9 and 6 are overlapping. I mean I just don't understand, aren't they all in different vertical line??
@architarora-iiitd3265
@architarora-iiitd3265 2 года назад
Just check once that in line 12, it should be nodes[y][x]
@saisaran4214
@saisaran4214 17 дней назад
hey striver could you please explain the time complexity a clear for this im not getting
@oyesaurabh
@oyesaurabh Год назад
Doubt : In the last part //This is correct for(auto it:mp){ //vertical vector col; for(auto i:it.second) //level col.insert(col.end(), i.second.begin(), i.second.end()); ans.push_back(col); } //But why not this....why cant I use push_back in vector instead of " col.insert(col.end()...) " ??? for(auto it:mp){ //vertical vector col; for(auto i:it.second) //level col.push_back( i.second.begin(), i.second.end()); ans.push_back(col); }
@kumkummittal7270
@kumkummittal7270 Год назад
col is having data type as int and not that of any 1d vector or set, we cannot pushback
@janhavitripurwar9293
@janhavitripurwar9293 2 года назад
Is this TC CORRECT ? TC :O(N) {For queue loop} + O(h * (2^h)-1) {for map traversing loop} {h=height of BT}
@user-yy6gz2fl7v
@user-yy6gz2fl7v 8 месяцев назад
Understood
@mohit7717
@mohit7717 Месяц назад
I am not able to unserstand one thing that how section in code is working:_ col.insert(col.end(), q.second.begin(), q.second.end()); ``` vector ans; for(auto p: nodes){ vector col; for(auto q: p.second){ // Insert node values // into the column vector col.insert(col.end(), q.second.begin(), q.second.end()); } // Add the column vector // to the final result ans.push_back(col); } return ans; ```
Далее
L22. Top View of Binary Tree | C++ | Java
10:30
Просмотров 232 тыс.
L25. Merge K Sorted Lists | Multiple Approaches
30:02
skibidi toilet zombie universe 37 ( New Virus)
03:02
Просмотров 1,3 млн
PORTAL SPAMMER🤬🤬🤬| Doge Gaming
00:19
Просмотров 683 тыс.
L23. Bottom View of Binary Tree | C++ | Java
13:13
Просмотров 171 тыс.
Solve Any Pattern Question With This Trick!
57:20
Просмотров 2,3 млн
Google Coding Interview With A High School Student
57:24
L21. Reverse Nodes in K Group Size of LinkedList
24:31
I gave 127 interviews. Top 5 Algorithms they asked me.
8:36
L24. Right/Left View of Binary Tree | C++ | Java
13:28
Просмотров 200 тыс.