in 3rd approach please add this line curr->left=NULL in the if block, after curr->right=curr->left; if you don't it give run time error:
@prathamsharma4416 Жыл бұрын
thanks mate
@kingmaker9082 Жыл бұрын
Nice
@AjayThakur-lo3cl Жыл бұрын
Thanks buddy :)
@U2011-n7w Жыл бұрын
thanks bro
@keshavbiyani92026 ай бұрын
Yes, was just gonna point that out. Thanks man.
@vedantsharma58762 жыл бұрын
This series is not best just because of the quality content, but also the way Striver has organized this playlist. The previous video was Morris Traversal, and this is the application of the Morris Traversal. You definitely are a gem Striver ❤
@naveen9646 Жыл бұрын
same for time to burn the tree prob which requires prerequiste of count nodes at distance k prob
@saimanaspathapadu1299 Жыл бұрын
Arey but iss me ,when previous becomes 7, how did node changed to 6 again
@priyanshkumar178 ай бұрын
Yes, when I watched the burn binary tree problem & saw the way it was solved using the previous problem, my concepts became stronger.@@naveen9646
@rushidesai28364 ай бұрын
@@saimanaspathapadu1299 6 ka right and left recursive call complete hua, uske baad 6 ka right set kiya as 7(prev), and 6 ka left as null. Finally, prev(last visited node) is set as 6(which is current node).
@samridhshubham81098 ай бұрын
I've referred to so many channels over my lifetime, ngl...this guy is just GOAT.
@RishiMishra19972 жыл бұрын
Your video lectures are very good and I am really thankful that you are providing us the free content. I think you forgot in the last pseudocode(approach 3) cur->left=NULL and due to that some of the viewers may have the confusion that's why I am writing this comment. Node *cur=root, *prev=NULL; while(cur!=NULL){ if(cur->left!=NULL){ prev=cur->left; while(prev->right){ prev=prev->right; } prev->right=cur->right; cur->right=cur->left; cur->left=NULL; //this line } cur=cur->right; } And thanks again for such quality content. Edit :- Some of the viewers has already wrote this in the comment and code which you gave is also correct.
@pulkitchausali13542 жыл бұрын
One of the best explanation from striver In Approach 3 after if block ends add one line cur.left = null; otherwise output will be wrong as left pointer is pointing to its original left child
@khalidalam9807 ай бұрын
Thanks bhai
@rishabhkumar81153 жыл бұрын
all 3 approaches are owsome!!!! and the 3rd one using linked list blows up...superbbbbbbbbbbb all 3 approaches are owsome!!!! and the 3rd one using linked list blows up...superbbbbbbbbbbb
@Dontpushyour_luck Жыл бұрын
did it with morris traversal even before watching the video. you taught us so good!
@SuyashSoni2482 жыл бұрын
Can be done by IBH(Induction-Base-Hypthesis) - def flatten(self, root): if root is None: return self.flatten(root.left) self.flatten(root.right) rL, rR = root.left, root.right root.left = None root.right = rL # induction temp = root while temp and temp.right: temp = temp.right temp.right = rR
@deepaksarvepalli23443 жыл бұрын
How it is possible for you man! You always come up with such blowing solutions.
@vrushabh_kulye70603 жыл бұрын
This solutions are already available on internet... btw great explanations....
@ashwinurewar50063 жыл бұрын
Gfg pe avlble hai with same eg
@sastashroud76462 жыл бұрын
Isn't this available on internet ?
@chandantaneja63882 жыл бұрын
@@vrushabh_kulye7060 yeah but nothing can beat his explanation skills.
@mugambo55052 жыл бұрын
solution har jagah hai internet par magar solution samjhana mei striver bhai ka koi takkar nhi hai except Harry bhai. fan of both ❤❤❤❤❤❤❤
@pranjalbansal84593 жыл бұрын
In morris traversal code there is a small correction I think There should be curr->left = NULL; After, curr->right = curr->left;
@krishnarajs9292 жыл бұрын
yesss
@k_harivardhan_40962 жыл бұрын
yes @pranjal bansal In java it will look like this curr.left=null;
@parthadhikari86752 жыл бұрын
Right
@sameekshamurdia5-yeariddph649 Жыл бұрын
Congrats guys for completing Binary Trees, ab BST start krte h 🥳🥳 Thank you so much striver bhaiya for the amazing series💖
@teqarine5752 Жыл бұрын
oof
@arshmehta50 Жыл бұрын
Which yr
@aastikofficial61007 ай бұрын
yeah kudos to you also lest keep growing with bst, graphs and dp
@ANANDKUMAR-jk9yp3 жыл бұрын
Striver Bhaiya, the same question was asked in my DE Shaw Interview. Unfortunately, couldn't answer that. Kaash , pahle dekh liya hota aapka yeh video. Anyways, thank you for your amazing explanation.
@karthik-varma-1579Ай бұрын
Congratulations, For Compeletion of Tree Ka Series
@stith_pragya6 ай бұрын
Understood.........Thank You So Much for this wonderful video.............🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻
@abdulmoizasif39303 күн бұрын
The first solution was absolutely beautiful.
@sparshsharma60683 жыл бұрын
Amazing explanation bhaiya! Just one doubt, I think while recording, you forgot to set the left pointers of nodes to null in morris traversal. Edit: The code links in the description are 100% working and correct.
@jaditi9302 жыл бұрын
This is what passion speaks like.Gets straight to the heart.I was finding hard to understand this concept.Thankyou so much Finally found someone to get the intuition behind algos.This is the first video of yours and subscribed right away.Just keep going.
@amitupadhyay24452 жыл бұрын
in the third approch there should be the curr.left=null after the curr.right=curr.left
@daman6661002 жыл бұрын
yes, good catch!
@ajayagrawal20679 ай бұрын
the 2nd solution is perfect for interview and very intuitive.
@satakshipal50082 жыл бұрын
You have arranged this playlist series in best order. It is really very helpful.
@deanwinchester86913 жыл бұрын
cur->left should be set to NULL or else it won't change and will be not accepted as in the question it is told that the nodes in flatten BT must be set to NULL.
@pawanlok17762 жыл бұрын
whenever I face a problem in solving a problem, first choice is TUF.. ]THANKS FOR MAKING THIS VIDEO.
@spandanrastogi7144 Жыл бұрын
Stack Solution can also be implemented with a Queue. Just push Left and then Right instead of Right and then Left.
@alesblaze47452 жыл бұрын
bro after watching your previous videos from this tree series and til 2:16 only i watched this video, i was able to come up with an approach and solved it iteratively. thanks a lot. Code : class Solution { public void flatten(TreeNode root) { TreeNode temp = root; if(temp == null) return; Deque stack = new LinkedList(); while(temp != null || !stack.isEmpty()) { TreeNode prev = null; while(temp != null) { if(temp.right != null) { stack.push(temp.right); } temp.right = temp.left; temp.left = null; prev = temp; temp = temp.right; } if(!stack.isEmpty()) { TreeNode nextRight = stack.pop(); prev.right = nextRight; temp = nextRight; } } } }
@iamnottech89184 ай бұрын
The main Intution for last approach is if we use normal Morris then we will loose right pointer and if we make it to root->right then a connection is made it will be not lost and also it is at its correct position
@rishabhkumar81153 жыл бұрын
all 3 approaches are owsome!!!! and the 3rd one using linked list blows up...superbbbbbbbbbbb
@codding32world502 жыл бұрын
why to spam nonsense write once only.. it keeps imp discussion down
@AdityaMehta13075 ай бұрын
Excellent Explanation, Thank you Striver
@shivangisrivastava11582 жыл бұрын
literally never thought we could do this question so easily!! i am blown! that too with 3 simple approaches!
@abhaykumarsingh38842 ай бұрын
Thank you striver I have figure out morris approach before even watching video But yes it took me 1:5 hr to come to actual solution But i think recursive soln is more hard
@dsa_tutorial Жыл бұрын
Guys something missing in 3rd approach after writing prev->right = curr->right curr->right = curr->left curr->left = NULL please include this line in order to break previous connections .
@PiyushKumar-mn3uh Жыл бұрын
Guys, There are something missing in 3rd approach. After this line curr->right = crr->left add curr->left = NULL to break the prev connections of left O.W you will get run time error.
@pulkitjain5159 Жыл бұрын
this reccursion will also work , normal preorder traversal, this will also take O(N) time Node * flattenMe(Node * root){ if(root == nullptr) return nullptr; Node * leftSubtreeLinkedList = flattenMe(root->left); Node * rightSubtreeLinkedList = flattenMe(root->right); root->left = nullptr; root->right = leftSubtreeLinkedList; Node * ptr = root; while(ptr->right!=nullptr){ ptr = ptr->right; } ptr->right = rightSubtreeLinkedList; return root; }
@codding32world502 жыл бұрын
how beutiful the first approach...
@eshandhok25912 жыл бұрын
one more thing, cur->left = nullptr; before starting iteration over next cur because it might give some kind of error
@apmotivationakashparmar72219 күн бұрын
Thank you So much Striver !
@himanshugupta70102 жыл бұрын
In the last approach after cur->right= cur->left ; then cur->left=NULL should be there.
@PrinceKumar-el7ob3 жыл бұрын
bow down ! recursion is really crazy and beautiful.
@bommidinitinАй бұрын
beautiful explanation
@WhisperingWalnuts2 жыл бұрын
Nice solution!! Thanks for making! Morris travesal solution starts at 15:42 !!!
@sauravchandra10 Жыл бұрын
Was able to complete the binary tree series in 5 days, looking to wrap up the BST questions in the next 2-3 days.
@Anonymous____________A7214 ай бұрын
What are you doing now? Unemployed or student or employed
@sauravchandra104 ай бұрын
@@Anonymous____________A721 Employed
@Anonymous____________A7214 ай бұрын
@@sauravchandra10 wow that's grear
@vedantnaikwadi5394Ай бұрын
@@sauravchandra10 bro which comapany any tips for interviews and aptitude??
@sauravchandra10Ай бұрын
@@vedantnaikwadi5394 turing, do DSA + Dev or ML and also focus on OOPS.
@sujan_kumar_mitra3 жыл бұрын
Understood! BTW, I have created a PR with Java code for this problem. Do give it a check!
@takeUforward3 жыл бұрын
Merged, thanks.
@ANANDKUMAR-jk9yp3 жыл бұрын
Sir, in the third approach (20:52), you are saying that you are finding the rightmost guy in the left subtree. But, initializing prev=cur->left and using the while loop may not always work. For ex: 1 / \ 2 4 / 3 In this case, if we are at the root then the last guy in the preorder traversal of left subtree according to your algorithm will be 2 , although it should be 3. Plz correct me, if i am wrong. Although, your algorithm works on even these cases well.
@anshumansharma45802 жыл бұрын
Yes it should be 2. Therefore 2's right will point to 4(see the code again). We will set right child of node 1 to node 2. Now we will move cur from 1 to 2. Now at node 2, what is the "rightmost guy in left sub-tree"? It is node 3. Now we will set right child of node 3 to right child of cur ; i.e right child of node2 which is 4. That's how your question is answered. Cheers !! Ask if you have any doubt.
@ShivamKumar-hf5ec2 жыл бұрын
if the left part of curr contains only one node itself so its left is null then the prev will automatically point to curr and will not point something else
@rajrajesh1669 Жыл бұрын
In the 3rd approach i think there is an issue, we are going as right as possible, but what if the right most node has a left child?
@saicharan46692 жыл бұрын
The first approach is really amazing 👏👏👏
@LalX77 Жыл бұрын
Thank You Striver so much, after watching all the previous binary trees videos, i could do this question without watching the solution!!
@dheerajsharma54922 жыл бұрын
I must say this is a well crafted question. THANKS
@alesblaze47452 жыл бұрын
at 17:30 bro, you need to add cur->left = null as well.
approach 3 void flatten(TreeNode* root) { while(root!=NULL) { if(root->left!=NULL) { TreeNode*temp=root->left; while(temp->right!=NULL) //that one condition to break that link is now not required . { temp=temp->right; } temp->right=root->right; //smart play root->right instead of root made connection for future root->right=root->left ; root->left=NULL; } root=root->right; } } };
@anshulgoel1940 Жыл бұрын
Two pointer approach in Kotlin fun flattenTree(head: Node?): Node?{ var p = head var q = head while(p != null){ if(p!!.left != null){ q = p!!.left while(q!!.right != null){ q = q!!.right } q!!.right = p!!.right p!!.right = p!!.left p!!.left = null } else { p = p!!.right } } return head }
@rahulsrivastava10403 жыл бұрын
Mind Blowing Explanation ...hats off :)
@ankitshukla89725 ай бұрын
In the last approac , using Morris traversal , you forgot to put curr.left= null . TreeNode curr=root; while(curr!=null){ if(curr.left != null){ TreeNode prev=curr.left; while(prev.right != null){ prev=prev.right; } prev.right=curr.right; curr.right=curr.left; curr.left=null; } curr=curr.right; }
@ketonesgaming11216 ай бұрын
What a gem !!
@kirubakaran1547 Жыл бұрын
In morris traversal method, u didn't make current's left pointer null
@adrishsaha4072 жыл бұрын
Just Wow Striver Bhaiya.......Conceptual videos are the best,code excluded.
In the morris traversal approach, shouldn't we make the curr->left = NULL ? Because after doing curr->right = curr->left Curr is having same subtrees on both left and right so shouldn't we remove the left subtree?
@takeUforward3 жыл бұрын
Do a dry run, you will see its done.
@krishnarajs9292 жыл бұрын
Yes you need to change that curr->right = curr->left; then curr->left = NULL
@vaalarivan_p2 жыл бұрын
16:00 - 17:15 dna 20:51(edoc)
@codingp1105 ай бұрын
Awesome!
@Learnprogramming-q7f8 ай бұрын
Thank you Bhaiya
@Mathaan-i4j Жыл бұрын
Very Good Explanation bruh!
@Shivi325904 ай бұрын
thank you
@ashishverma13822 жыл бұрын
understand this question very easily thanks
@mayanksingh5783 Жыл бұрын
Mind blowing explaination
@dsa_tutorial Жыл бұрын
Keep uploading videos keep going Thank you for this amazing contents .
In the first method how space complexity is O(N)...we've not made any extra ds...is this because of stack size due to function calls?
@shubham_v Жыл бұрын
It's because each recursion call takes O(1) stack space internally. So for N number space complexity is O(N).
@anujrawat63043 жыл бұрын
understood , great content, preparing for interview from it
@mohdkhaleeq74682 жыл бұрын
in appraoch 1 it would be reverse preorder
@avanishmaurya203410 ай бұрын
Nice
@shivangisrivastava11582 жыл бұрын
Salute to your efforts for making such a wonderful series.
@cupidchakma64483 ай бұрын
can striver please provide a way to debug and visualize recursive problems, its hard to visual and imagine what will happen on next step when doing recursion related problems
@nayanikasinghachowdhury67475 ай бұрын
in first approach isnt it reverse preorder and not reverse postorder?
@mohammedadnan2450 Жыл бұрын
Bhaiya its better to solve this with morris traversal concept
@imilanprj3 жыл бұрын
Awesome explanation 🔥🔥🔥
@motabhaimotivation Жыл бұрын
I could get the last algo on my own and felt so satisfied seeing Striver told the same method.
@UECAshutoshKumar Жыл бұрын
Thank you sir
@abhinavaarya94372 жыл бұрын
5:48 Seven! Seven! Monica vibes
@ShubhamKumar-ex3nk Жыл бұрын
can't we use dummy node to create linked list?
@YeaOhYeahh11 ай бұрын
🔥🔥
@Jashan771142 жыл бұрын
how S for 1st approach is O(n) and for third approach is O(1) ?
@xd90502 жыл бұрын
did u get its answer
@Anythiny Жыл бұрын
recursion stack space
@techxpertrishabh70112 жыл бұрын
I like stack approach 🧡🧡
@jatinsingh13689 ай бұрын
Best Approach : CODE : void flatten(TreeNode* root) { //head and tail are passed by reference TreeNode* head = NULL,*tail=NULL; find(root,head,tail); } void find(TreeNode* root,TreeNode*& head,TreeNode*& tail) { if(root==NULL) return; TreeNode* left1 = root->left; TreeNode* right1 = root->right; if(head==NULL) { head=root; tail=root; // keep care to make left NULL , else will create problem tail->left=NULL; } else { tail->right=root; // keep care to make left NULL , else will create problem root->left=NULL; tail=root; } find(left1,head,tail); find(right1,head,tail); }
@paragroy53593 жыл бұрын
Nice explanation your videos are really good...please keep on making such videos...you are doing a great job.
@shreyasingh78332 жыл бұрын
Thank you so much sir for such a clear and detailed explanation !