L34. Construct a Binary Tree from Preorder and Inorder Traversal | C++ | Java

  Рет қаралды 265,895

take U forward

take U forward

Күн бұрын

Пікірлер: 366
@takeUforward
@takeUforward 3 жыл бұрын
Please likeeee, shareeee and subscribeeeeeeee :) Also follow me at Insta: Striver_79
@meme_eternity
@meme_eternity 4 ай бұрын
Relevel pe login otp nhi receive ho rahi..... fix it
@SchrodingerMan
@SchrodingerMan 2 жыл бұрын
for those who are getting TLE - pass the map in function with refernce ..................... it happens beacause when we pass map without refernce it start to copy all the value........ whereas if we pass the reference it only take base address................. so saving the time :-)
@herculean6748
@herculean6748 2 жыл бұрын
Thanks man!!! I couldn't find why it was giving TLE
@SchrodingerMan
@SchrodingerMan 2 жыл бұрын
@@herculean6748 welcome 💪
@AnkitKumarGupta03
@AnkitKumarGupta03 Жыл бұрын
Thank you bro.
@anshulkumarneekhara9377
@anshulkumarneekhara9377 9 ай бұрын
Thanks man
@misterbean6674
@misterbean6674 3 ай бұрын
saved my life.
@roushankumar7684
@roushankumar7684 10 ай бұрын
Free me Aisa explanation koi nii dega. You are real life hero.
@shubhamkumar-hx1fb
@shubhamkumar-hx1fb 3 ай бұрын
bhut log mil jayenge ye tumhari fault hai....ager tum aankhen band karke khojoge to koi nhin dikhega
@ransh-sahu
@ransh-sahu 3 ай бұрын
@@shubhamkumar-hx1fb Searched the whole youtube being comfortable and understanding it very well . The consistency striver followed is unmatched and its true none is better than striver if u r targeting fang or higher . There is always a shortage of content or room for subscription. Praise striver rather than being cool lgunga ase bolunga
@samyakjain7422
@samyakjain7422 2 жыл бұрын
coding ninja ka course liya tha usme iski explanation smjh nhi aayi lekin apki video dekhi aur 1 shot me smjh aagai . thanks striver . u teach like u r my friend and not a teacher which i like most bout ur videos !!
@gouravkumarshaw5467
@gouravkumarshaw5467 2 жыл бұрын
(a) Inorder (Left, Root, Right) : (b) Preorder (Root, Left, Right) : (c) Postorder (Left, Right, Root) :
@gouravkumarshaw5467
@gouravkumarshaw5467 Жыл бұрын
Great!!
@ridamsoni1762
@ridamsoni1762 Жыл бұрын
@@gouravkumarshaw5467 grt
@Stefan_2117
@Stefan_2117 5 ай бұрын
Gr8
@satyamraj2779
@satyamraj2779 4 ай бұрын
grate.
@manaskhare412
@manaskhare412 2 жыл бұрын
It took a while to understand this tricky problem, but now it's completely clear. Thank you striver, kudos for such amazing content.
@alexrcrew1975
@alexrcrew1975 2 жыл бұрын
haha nice going at present whichtopic youaredoing
@cur92lyone
@cur92lyone 2 жыл бұрын
I spent two days trying to understand this Algo. Finally, your video made me understand it. Thanks. :)
@rushidesai2836
@rushidesai2836 5 ай бұрын
I can understand. Two of the most important quesitons - Tree from Preorder and Inorder, and tree from inorder and postorder.
@gouravchaki7990
@gouravchaki7990 Жыл бұрын
Out of all these coding I would just provide method to prepare Biriyani!! Step 1 Prepare saffron-kewra water and chop veggies To make a delightful chicken biryani dish, firstly soak saffron in water to prepare saffron water (one tsp saffron can be soaked in 1/4 cup water). Next, mix kewra drops in water and mix well to make kewra water. Set them aside for later usage. Now, chop the onion and coriander leaves and keep them aside. Step 2 Saute the onions Meanwhile, heat olive oil in a deep bottomed pan. Once the oil is hot enough, add cumin seeds, bay leaf, green cardamom, black cardamom, cloves in it, and saute for about a minute. Then, add chopped onion to it and saute until pink. Now, add chicken into it with slit green chillies, turmeric, salt to taste, ginger-garlic paste, red chilli powder and green chilli paste. Mix well all the spices and cook for 2-3 minutes. Then, add hung curd into it and give a mix. (Make sure the chicken is washed properly and patted dry before adding it to the dish) Step 3 Cook biryani on low heat for 5-6 minutes Turn the flame to medium again and add garam masala in it along with ginger julienned, coriander and mint leaves. Add kewra water, rose water and 1 tsp saffron water in it. Cook till the chicken is tender. Then add 1 cup cooked rice and spread evenly. Then add the remaining saffron water and pour ghee over it. You can now cook the dish without the lid or cover it with a lid to give a dum-effect due to the steam formation. Step 4 Serve hot chicken biryani with your favourite chutney or raita Cook for 15-20 minutes with a closed lid and garnish with 1 tbsp fried onions and coriander leaves. Serve hot chicken biryani with raita of your choice. Enjoy!
@NitishGautam-g1j
@NitishGautam-g1j Ай бұрын
Bro we need more teachers like you 😢😢😢 who actually can think from perspective of a beginner and explain step by step
@anubhav452
@anubhav452 2 жыл бұрын
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ /* JUST FINDING THE POSITION OF THE FIRST ELEMENT IN THE PREORDER VECTOR IN THE INORDER VECTOR THEN USING THE POSITION OF THAT ELEMENT TO FIND THE LEFT SUBTREE AND THE RIGHT SUBTREE */ class Solution { public: int find_pos(vectorv,int x){ for(int i=0;ileft=buildTree(l1,l2); root->right=buildTree(r1,r2); return root; } };
@roushankumar7684
@roushankumar7684 10 ай бұрын
You have changed the teachers image as spreading skill without taking any money❤
@ss-pz4zh
@ss-pz4zh Жыл бұрын
THE BEST TREE series even though i have taken a paid course...still i am coming here to understand ...>God Bless u TUF
@gautamkrishnan9982
@gautamkrishnan9982 3 жыл бұрын
Keep Going Striver!! I am following your SDE Sheet to revise on the DSA concepts. Thank you so much for all your content.
@Cool96267
@Cool96267 3 жыл бұрын
Which programming language you are using?
@mynk_rjpt
@mynk_rjpt 2 жыл бұрын
@@Cool96267 c++
@9-teen77
@9-teen77 2 жыл бұрын
did you complete it?
@Parth.Deshpande
@Parth.Deshpande 3 жыл бұрын
For interviewbit solution , pass the map by reference TreeNode* buildT(vector &A,int prestart,int preend,vector &B,int instart,int inend , map& mp){ if(prestart>preend || instart>inend){ return NULL; } TreeNode* root = new TreeNode(A[prestart]); int inroot = mp[root->val]; int leftnums = inroot - instart; root->left = buildT(A,prestart+1,prestart+leftnums,B,instart,inroot-1,mp); root->right = buildT(A,prestart+leftnums+1,preend,B,inroot+1,inend,mp); return root; } TreeNode* Solution::buildTree(vector &A, vector &B) { map mp; for(int i=0;i
@priyanshurai460
@priyanshurai460 2 жыл бұрын
Can you please tell me why the time limit exceeds when the map is passed by value?
@Star_Gazer_42
@Star_Gazer_42 2 жыл бұрын
@@priyanshurai460 coz everytime the function gets called it creates a new map with same name at another memory location with same values. So these operations take time and space which is alot, thats why TLE.
@natanshisharma8828
@natanshisharma8828 4 ай бұрын
If you are confused how the they are storing addresses, its during backtracking that the nodes addresses are being stored not during creation of the nodes.
@ShreyaJain-1808
@ShreyaJain-1808 Жыл бұрын
Here is the code to deal with duplicate elements we use a queue so that the element that occurs later in the in-order get pushed at the front and keep popping the index that are processed, we now get a correct tree formed according to the preorder traversal class Solution{ public: Node* solve(int in[],int in_start,int in_end,int pre[],int pre_start,int pre_end,map &pos) { if(pre_start>pre_end|| in_start>in_end) { return NULL; } int inroot=pos[pre[pre_start]].front(); pos[pre[pre_start]].pop(); int elem=inroot-in_start; Node* root=new Node(pre[pre_start]); root->left=solve(in,in_start,inroot-1,pre,pre_start+1,pre_start+elem,pos); root->right=solve(in,inroot+1,in_end,pre,pre_start+elem+1,pre_end,pos); return root; } Node* buildTree(int in[],int pre[], int n) { // Code here if(n==0) return NULL; map pos; for(int i=0;i
@meetmandhane
@meetmandhane Жыл бұрын
Will the time complexity of this approach remain same i.e. O(N)?
@ayushgautam169
@ayushgautam169 Жыл бұрын
yeah exactly what i did i took a list and removed from front, like we can take a queue
@i-am-darshil
@i-am-darshil Жыл бұрын
Is a unique tree even possible in case of duplicate elements? 2 trees can be formed with the same inorder and preorder Inorder - 1 2 2 3 2 Preorder - 2 2 1 2 3
@tanishq2766
@tanishq2766 Жыл бұрын
I guess we don’t need a map, if we can split them as we can always split into two parts.
@trojanhorse8278
@trojanhorse8278 5 ай бұрын
@@i-am-darshil Correct, You can't always construct a unique binary tree when the keys are repeated. EX is Pre : 10 10 10 In : 10 10 10 , now based on your choice of root in in-order you will get different tree structures. Hence only if the interviewer wants to check whether you know this fact or not he might ask this question but once you explain to him that we can't always create a unique tree without defining the rule to choose the root from in-order, he mostly will get satisfied and won't ask you to actually write a code.
@akankshasinha3352
@akankshasinha3352 2 жыл бұрын
Thankyou striver 🥺 you’re a gem that all of us have got !!
@karthik-varma-1579
@karthik-varma-1579 Ай бұрын
Java Code:- class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { HashMap hm = new HashMap(); int n = inorder.length; for(int i=0;ipreEnd || inStart>inEnd) return null; TreeNode root = new TreeNode(preorder[preStart]); int hMap = hm.get(root.val); int numsLeft = hMap-inStart; root.left = builder(inorder,inStart,hMap-1,preorder,preStart+1,preStart+numsLeft,hm); root.right = builder(inorder,hMap+1,inEnd,preorder,preStart+numsLeft+1,preEnd,hm); return root; } }
@shikharsrivastava7312
@shikharsrivastava7312 2 жыл бұрын
simplified version of code explained above /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* constructTree(int i,int j,int &ind,vector &preorder,vector &inorder,unordered_map &mp) { if(i>j) { return NULL; } int rootVal=preorder[ind]; ind+=1; TreeNode *root=new TreeNode(rootVal); int in=mp[rootVal]; root->left=constructTree(i,in-1,ind,preorder,inorder,mp); root->right=constructTree(in+1,j,ind,preorder,inorder,mp); return root; } TreeNode* buildTree(vector& preorder, vector& inorder) { unordered_map mp; for(int i=0;i
@AmitSharma-nv2oj
@AmitSharma-nv2oj Жыл бұрын
can you explain how i>j condition works
@stith_pragya
@stith_pragya Жыл бұрын
UNDERSTOOD...Thank You So Much for this wonderful video...........🙏🙏🙏
@nilesh69420
@nilesh69420 8 ай бұрын
Great explanation as always. The last dry run just before showing code was very very helpful.
@AppaniMadhavi
@AppaniMadhavi 8 ай бұрын
Thanks alot bhai!!. I didn't understood first but in other problems I need to use this, so I visited once again and now its clear cut for me thanks alot..
@lalitgaikwad7238
@lalitgaikwad7238 8 ай бұрын
You're The Real Life G.O.A.T i.e Greatest of All Times
@sammy_yo5967
@sammy_yo5967 Жыл бұрын
C++ code to run on Leetcode: - class Solution { public: TreeNode* buildTree(vector& preorder,int preStart,int preEnd,vector& inorder,int inStart,int inEnd, map& inMp) { if(preStart > preEnd || inStart > inEnd) return NULL; TreeNode* root = new TreeNode(preorder[preStart]); int inRoot = inMp[root->val]; int numsLeft = inRoot - inStart; root ->left = buildTree(preorder,preStart+1,preStart+numsLeft,inorder,inStart,inRoot - 1,inMp); root -> right = buildTree(preorder,preStart+numsLeft+1,preEnd,inorder,inRoot+1,inEnd,inMp); return root; } TreeNode* buildTree(vector& preorder, vector& inorder) { map inMp; for(int i = 0; i < inorder.size(); i++) { inMp[inorder[i]] = i; } TreeNode* root = buildTree(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1,inMp); return root; } };
@agnijeetsharma
@agnijeetsharma 6 ай бұрын
here is simple version of code class Solution { public: TreeNode* build(vector& preorder, vector& inorder, int& preStart, int inStart, int inEnd,unordered_map&mp) { if (inStart > inEnd) return nullptr; TreeNode* curr = new TreeNode(preorder[preStart]); int pos=mp[preorder[preStart]]; preStart++; // Move to the next root in the preorder sequence curr->left = build(preorder, inorder, preStart, inStart, pos - 1,mp); curr->right = build(preorder, inorder, preStart, pos + 1, inEnd,mp); return curr; } TreeNode* buildTree(vector& preorder, vector& inorder) { unordered_mapmp; for(int i=0;i
@sourabhsharma2746
@sourabhsharma2746 2 жыл бұрын
This is toh another level explanation bhai. 👌👌 how can someone be so clear in his explanation.. btw amazing thanks bhai. love from punjab
@rushidesai2836
@rushidesai2836 5 ай бұрын
Yeh baat pe bhangdaa ho jae! :)
@jotsinghbindra8317
@jotsinghbindra8317 4 ай бұрын
chki rkh kam bai🙌
@sriharshas3889
@sriharshas3889 9 ай бұрын
Superb Explanation ! Here in the code we should pass the map as reference otherwise we will get the memory limit exceeded.
@vaalarivan_p
@vaalarivan_p Жыл бұрын
3:30 - 3:35 CW : 12:40 - 17:01
@akashverma5756
@akashverma5756 4 ай бұрын
This is one of insanely tricky problem of Binary Tree.
@ankushsingh3392
@ankushsingh3392 2 жыл бұрын
Vro dus video dekhi but nhi hua apki video ka sirf first two minutes ke logic ko dekh kar samjh gya and done it🙃🙃
@sri199
@sri199 4 ай бұрын
For duplicates value try dict of list to store all index of the element and pop the first one res = [] mmap = defaultdict(list) n = len(preorder) def build(preStart,preEnd,inStart,inEnd): if preStart > preEnd or inStart > inEnd: return None root = TreeNode(preorder[preStart]) orders = mmap[root.val] index = orders.pop(0) inRoot = index numsLeft = inRoot - inStart root.left = build(preStart+1,preStart+numsLeft,inStart,inRoot-1) root.right = build(preStart+numsLeft+1,preEnd,inRoot + 1,inEnd) return root for i in range(len(inorder)): mmap[inorder[i]].append(i) return build(0,n-1,0,n-1)
@sarthak._v_
@sarthak._v_ 17 күн бұрын
Best Lecture
@26_jamkhandedattatray59
@26_jamkhandedattatray59 2 жыл бұрын
doing dry run is little bit difficult pr when i understood 😌 toh bas mazza agaya😀. Thnx bro for such great video 😊
@vinayrohitreddypadala2705
@vinayrohitreddypadala2705 11 ай бұрын
Hey Striver, this algorithm is working for unique values but not for the repeated ones. Example:- inorder = [7 ,3 ,11 ,1 ,17 ,3 ,18] postorder = [1, 3, 7, 11, 3, 17, 18] And In this scenario i dont think inMap is kind of working.
@KandulaAsrith
@KandulaAsrith 4 ай бұрын
someone please reply how to solve if the tree contain duplicate elements...
@TonyStark-ct8xd
@TonyStark-ct8xd Жыл бұрын
This code doesn't work for duplicate values, gfg has updated their testcases.
@rushidesai2836
@rushidesai2836 Жыл бұрын
Khud se try karna bhai, he is already putting out so much content for us.
@apmotivationakashparmar722
@apmotivationakashparmar722 27 күн бұрын
Thank you So much Striver !
@KeigoEdits
@KeigoEdits 4 ай бұрын
I am shocked, that i came up with the solution to this problem in my first attempt, though runtime was low as i was searching index of root in inorder using linear search(though dividing the space in half after each recursive call) but its still O(n). Later saw in this video, that we can use hashmap for this purpose. Though indeed I couldn't have done without the intuition I got in earlier video of striver explaining unique binary question.
@iamnottech8918
@iamnottech8918 4 ай бұрын
Superb explanation.
@sanchitsanyam7359
@sanchitsanyam7359 6 ай бұрын
Thanks allot Bhaiya ,your videos awesome , I love your videos.
@roushankumar7684
@roushankumar7684 10 ай бұрын
Thankyou bhaiya for lifting me up❤.
@gandhijainamgunvantkumar6783
@gandhijainamgunvantkumar6783 2 жыл бұрын
Thank you so much for explaining very beautifully
@varnitgupta706
@varnitgupta706 9 ай бұрын
amazing work
@nextnotification9857
@nextnotification9857 8 ай бұрын
wrote the code in first attempt😀, i have made the map global to the class and thus no need to pass it again and again
@iamnottech8918
@iamnottech8918 4 ай бұрын
What an explanation !!
@MJBZG
@MJBZG 3 ай бұрын
understood striver, much love
@CharitraAgarwal
@CharitraAgarwal 4 ай бұрын
TreeNode *getNode(vector&pre, vector& ino, int s, int e, int &i) { if(s > e) return NULL; // no more elements in inorder range int el = pre[i++]; // get current element in preorder TreeNode *node = new TreeNode(el); // create a node if(s == e) return node; // if its the only node in inorder range // search for this node in the inorder arrangement int ind = s; while(ino[ind] != el) ind++; // if there are some elements in the left of the inorder index, // this means, we have some elements in the left subtree if(ind > s) node->left = getNode(pre, ino, s, ind-1, i); // remaining elements are in right subtree node->right = getNode(pre, ino, ind+1, e, i); return node; // return this node } TreeNode* buildTree(vector& preorder, vector& inorder) { int i = 0; // index for preorder array // taking preorder index as reference, as it gets updated as soon as // elements gets used return getNode(preorder, inorder, 0, inorder.size()-1, i); }
@vishalgowrav
@vishalgowrav 2 жыл бұрын
What an explanation!!🥺❤ Take a bow striver🙇‍♂️
@sanjai_rs7
@sanjai_rs7 Жыл бұрын
Brilliant idea!
@andrewcenteno3462
@andrewcenteno3462 Жыл бұрын
Phenomenal explanation
@kuldeepmishra4718
@kuldeepmishra4718 2 жыл бұрын
Maza aa gaya bhai. Aaise hi padhate raho
@adrashsingh4109
@adrashsingh4109 7 ай бұрын
great explanation! Thank you
@arnedits6335
@arnedits6335 5 ай бұрын
grest explanantion.
@siddharthmagadum16
@siddharthmagadum16 2 жыл бұрын
Your explanation is OP.
@Learnprogramming-q7f
@Learnprogramming-q7f 8 ай бұрын
Thank you Bhaiya
@harshadatrimukhe9147
@harshadatrimukhe9147 Жыл бұрын
TLE for last test case(Leetcode)
@AashimaKatoch
@AashimaKatoch Жыл бұрын
@Sidak Chuchra it helped thankyou
@cinime
@cinime 2 жыл бұрын
Understood! So awesome explanation as always, thank you very much!!
@subhasishdas3011
@subhasishdas3011 2 жыл бұрын
in base case no need to check both in and pre any 1 check is enough
@moinul6942
@moinul6942 3 жыл бұрын
Do check out the code link provided in the description to avoid TLE on leetcode.
@codding32world50
@codding32world50 2 жыл бұрын
For TLE on leetcode just declare map public don't pass it in the function
@adarshpandey622
@adarshpandey622 2 жыл бұрын
Bro you saved my whole day
@saiprashanth2646
@saiprashanth2646 Жыл бұрын
Thank u so much bro.
@tejuschaturvedi6234
@tejuschaturvedi6234 Жыл бұрын
you can also pass the map as reference when passing the map in function .
@prashukjain8519
@prashukjain8519 10 ай бұрын
saved my time
@soubhikghosh6564
@soubhikghosh6564 Жыл бұрын
Best solution ever!
@bhargavijethva7958
@bhargavijethva7958 8 ай бұрын
Amazing!👏👏
@PratikShah123
@PratikShah123 9 ай бұрын
Wonderful !! Btw, what if Tree contains duplicate values, where finding index out of InOrder will be a challenge..!
@KartikeyTT
@KartikeyTT 6 ай бұрын
tysm sir
@Shivi32590
@Shivi32590 4 ай бұрын
thank you
@Lalit_Shirsath
@Lalit_Shirsath 3 жыл бұрын
can we use unordered map to save time complexity ? map --> O( log n ) unordered_map --> O(1)
@takeUforward
@takeUforward 3 жыл бұрын
Unordered map’s worst case is still o(n) 😉
@Lalit_Shirsath
@Lalit_Shirsath 3 жыл бұрын
@@takeUforward ha bhaiya 😁🤗
@shivammishrasvnit5456
@shivammishrasvnit5456 2 жыл бұрын
@@takeUforward bhyaa still in leetcode tle coming what to do😞😞 ?
@shivammishrasvnit5456
@shivammishrasvnit5456 2 жыл бұрын
no i got accepted after putting map by reference, thanks for it you explained soo well!
@hiddenguy7174
@hiddenguy7174 2 жыл бұрын
@@shivammishrasvnit5456 try passing map by reference
@GoluYadav-cg3kx
@GoluYadav-cg3kx 2 жыл бұрын
Hi striver love from iit r. I just wanna clarify that if case the in order traversal have duplicate values then what should be our approach
@samarthvarshney512
@samarthvarshney512 Жыл бұрын
just use a unordered_map> mp
@prathamchoudhary
@prathamchoudhary 2 жыл бұрын
best explanation ever
@UECAshutoshKumar
@UECAshutoshKumar Жыл бұрын
Thank you sir
@prernagupta7729
@prernagupta7729 Жыл бұрын
You are doing a great job bro...thanks a lot.
@prayagdesai4884
@prayagdesai4884 2 жыл бұрын
Very clear and concise explaination..
@divakar4339
@divakar4339 2 жыл бұрын
Loved the concept. Thank You striver
@shivamchaudhary3646
@shivamchaudhary3646 Жыл бұрын
Very well explained... but at leetcode it will give memory limit exceed for a particular testcase make map globally !
@sparshsharma6068
@sparshsharma6068 3 жыл бұрын
Understood! but, Bhaiya There is a more optimal version available in Leetcode discussion.
@takeUforward
@takeUforward 3 жыл бұрын
I don’t think so.. can you please paste it here.
@sparshsharma6068
@sparshsharma6068 3 жыл бұрын
@@takeUforward Here's the java code bhaiya private TreeNode constructTree(TreeNode root, int[] idx, int stop,int[] preorder, int[] inorder){ if(idx[0] >= preorder.length) return root; if(inorder[idx[1]] == stop){ idx[1]++; return root; } root = new TreeNode(preorder[idx[0]++]); root.left = constructTree(null, idx, root.val, preorder, inorder); root.right = constructTree(null, idx, stop, preorder,inorder); return root; } public TreeNode buildTree(int[] preorder, int[] inorder) { int[] idx = {0,0}; //{preorder_idx, inorder_idx} return constructTree(null, idx, Integer.MAX_VALUE, preorder, inorder); } Time O(n), Space O(n) (recursive) I kept on dry running it and it then seemed logical, but, I still don't know the intuition behind it. It will be very helpful, If can you make a LC post and explain the intuition behind this. link to discussion : leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/discuss/34543/Simple-O(n)-without-map Look in the comments, you will find C++ or java code.
@adithyaas7735
@adithyaas7735 2 жыл бұрын
202/203 test case timelimit exceeded to fix this just put ''&map" on function arguments
@santanu29
@santanu29 2 жыл бұрын
Thank you. I was stuck there. Quickly can you mention why it gives tle for not using "&"
@adithyaas7735
@adithyaas7735 2 жыл бұрын
@@santanu29'&' means we are passing the map as reference (only the address of it) In pass by reference, no new copy of the variable is made, so overhead of copying is saved
@anonymous090
@anonymous090 Жыл бұрын
Thank you Bhaiya❤
@viditaagrawal4169
@viditaagrawal4169 Жыл бұрын
Nice explanation !! For duplicate values instead of using map we can create individual function findIndex from inorder array using visited array , which won't repeat index , my code passed on gfg
@nikhilsachan_cse7144
@nikhilsachan_cse7144 Жыл бұрын
In question, it is written that no duplicate values are allowed, otherwise it will be impossible to create tree from traversals in some cases.
@fine2981
@fine2981 Жыл бұрын
can u pls share ur code.??
@viditaagrawal4169
@viditaagrawal4169 Жыл бұрын
@@fine2981 int findIndex(int in[],int ele,int n,vector &vis){ for(int i=0;ipreEnd || inStart>inEnd) return NULL; Node* root = new Node(pre[preStart]); int index = findIndex(in,root->data,n,vis); int inleftEnd = index-1; int preleftEnd = preStart+index-inStart; root->left = solve(in,pre,inStart,inleftEnd,preStart+1,preleftEnd,vis,n); int inrightSt = index+1; int prerightSt = preleftEnd+1; root->right = solve(in,pre,inrightSt,inEnd,prerightSt,preEnd,vis,n); return root; } public: Node* buildTree(int in[],int pre[], int n) { vector vis(n,0); return solve(in,pre,0,n-1,0,n-1,vis,n); }
@viditaagrawal4169
@viditaagrawal4169 Жыл бұрын
@@nikhilsachan_cse7144 Its on leetcode that duplicate isn't there but on gfg its mentioned in question that duplicates are also present
@fine2981
@fine2981 Жыл бұрын
/*Complete the code here. Node is as follows: struct Node { int data; Node* left; Node* right; }; */ class Solution{ public: Node* tree(int in[],int pre[], int &preindex,int ins,int ine,int n){ if(ins>ine || preindex>=n){ return NULL; } int element=pre[preindex++]; Node* root=new Node(element); int inorderindex=0; for(int i=0;idata==in[i]){ inorderindex=i; break; } } root->left=tree(in,pre,preindex,ins,inorderindex-1,n); root->right=tree(in,pre,preindex,inorderindex+1,ine,n); return root; } Node* buildTree(int in[],int pre[],int n) { int preindex=0; Node* ans=tree(in,pre,preindex,0,n-1,n); return ans; } }; can you tell me whats wrong with this code? its giving me wrong ans after 54 test cases.. this was the test case that it did not passed. 7 7 3 11 1 17 3 18 1 3 7 11 3 17 18
@bhaveshkumar6842
@bhaveshkumar6842 2 жыл бұрын
Thank you, Striver!!!
@dsa.aditya
@dsa.aditya Жыл бұрын
IN GFG THE CODE MIGHT GET SEGMENTATION FAULT SO PLEASE USE QUEUE DATA STRUCTURE TO STORE THE MULTIPLE INDEX OF A SAME ELEMENT. REALLY Thank You so much Striver Bhaiya🙏 HERE IS THE CODE ------ Node* ans(int pre[],int preStart,int preEnd,int in[],int inStart,int inEnd,unordered_map& mp) { if (preStart > preEnd || inStart > inEnd) { return NULL; } Node* root=new Node(pre[preStart]); int inroot=mp[root->data].front(); mp[root->data].pop(); int left=inroot-inStart; root->left=ans(pre,preStart+1,preStart+left,in,inStart,inroot-1,mp); root->right=ans(pre,preStart+left+1,preEnd,in,inroot+1,inEnd,mp); return root; } Node* buildTree(int in[], int pre[], int n) { unordered_map mp; for (int i = 0; i < n; i++) { mp[in[i]].push(i); } Node* root=ans(pre,0,n-1,in,0,n-1,mp); return root; }
@relaxingnaturalvibrations1171
@relaxingnaturalvibrations1171 Жыл бұрын
thanks bro
@mohanseditz
@mohanseditz Жыл бұрын
Good Explanation of code!
@vvsish8803
@vvsish8803 2 жыл бұрын
Python Solution class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]: inMap={} for i in range(len(inorder)): inMap[inorder[i]]=i return self.helper(preorder,0,len(preorder)-1,inorder,0,len(inorder)-1,inMap) def helper(self,preorder,preStart,preEnd,inorder,inStart,inEnd,inMap): if preStart>preEnd: return None elif preStart==preEnd: return TreeNode(preorder[preStart]) else: rootVal=preorder[preStart] inRoot=inMap[rootVal] numsLeft=inRoot-inStart root=TreeNode(rootVal) root.left=self.helper(preorder,preStart+1,preStart+numsLeft,inorder,inStart,inRoot-1,inMap) root.right=self.helper(preorder,preStart+numsLeft+1,preEnd,inorder,inRoot+1,inEnd,inMap) return root
@shreyasnagabhushan4918
@shreyasnagabhushan4918 2 жыл бұрын
this was excellent bro, topic perfectly settled in my mind
@dharanit3918
@dharanit3918 3 жыл бұрын
Excellent explanation bro❤❤
@isheep9025
@isheep9025 Жыл бұрын
self note:t inleft=no of elements left on the left of root index. inroot=index of root in inorder inlefr- used for indexing pre/post; inroot-used for indexing inorder
@003_sambit5
@003_sambit5 Жыл бұрын
Thanks a lot Striver for providing such amazing content to us for free of cost...respect for your Hard Work. Just one doubt , not sure if leetcode has updated its tcs coz now this algo is giving TLE at 202nd tc out of 203 tcs...
@013_aman
@013_aman Жыл бұрын
Take map as by reference it will work
@SahilSharma-to8nd
@SahilSharma-to8nd Жыл бұрын
@@013_aman thanks
@gouravkumarshaw5467
@gouravkumarshaw5467 2 жыл бұрын
great explanation thanks!!
@neelpatel122
@neelpatel122 3 жыл бұрын
Brilliant Explanation
@VishakhavelShanmuganathan
@VishakhavelShanmuganathan 3 ай бұрын
thanks!
@avanishmaurya2034
@avanishmaurya2034 10 ай бұрын
Nice
@jayeshbhanushali1745
@jayeshbhanushali1745 3 жыл бұрын
Please please please make DP series !!!
@DeadPoolx1712
@DeadPoolx1712 12 күн бұрын
UNDERSTOOD;
@auroshisray9140
@auroshisray9140 2 жыл бұрын
Loving your explanation bhaiya😍
@Saurav_suman-pj8uk
@Saurav_suman-pj8uk Жыл бұрын
loving your video
@supratimbhattacharjee5324
@supratimbhattacharjee5324 2 жыл бұрын
class Solution { public: TreeNode* create(vector& preorder, vector& inorder, unordered_map& hash,int ps,int pe,int is,int ie) { if(ps>pe || is>ie) return nullptr; int rootIndxInInorder=hash[preorder[ps]]; int lps=ps+1; int lpe=ps+rootIndxInInorder-is; int rps=lpe+1; int rpe=pe; int lis=is; int lie=rootIndxInInorder-1; int ris=rootIndxInInorder+1; int rie=ie; TreeNode* root=new TreeNode(preorder[ps]); TreeNode* left=create(preorder,inorder,hash,lps,lpe,lis,lie); TreeNode* right=create(preorder,inorder,hash,rps,rpe,ris,rie); root->left=left; root->right=right; return root; } TreeNode* buildTree(vector& preorder, vector& inorder) { int n=preorder.size(); unordered_map hash; for(int i=0;i
@ankitsingh9147
@ankitsingh9147 2 жыл бұрын
Thankyou Bhaiya😀
@akashbhoyar7403
@akashbhoyar7403 2 жыл бұрын
leetcode added some crazy test case......to which striver sir's code is showing TLE. If anyone knows abt -> How to deal with TLE....Please Comment !
@als_venky7057
@als_venky7057 Жыл бұрын
just send your map as a reference instead of sending it normally. And see the magic, boooom💥💥
@alesblaze4745
@alesblaze4745 2 жыл бұрын
thanks mate!
@clarencegomes6076
@clarencegomes6076 3 жыл бұрын
Gazab! Thanks Striver
@achalsayee2534
@achalsayee2534 6 ай бұрын
note :In case of duplicates map won't work.because it overwrites old index with latest index. so do linear search within the bounds in inStart and inEnd.
@vijaynag7723
@vijaynag7723 10 ай бұрын
understood
@dipanshu-singh
@dipanshu-singh Жыл бұрын
Love this vid. ❤
L33. Requirements needed to construct a Unique Binary Tree | Theory
8:41
Увеличили моцареллу для @Lorenzo.bagnati
00:48
Кушать Хочу
Рет қаралды 8 МЛН
Thank you Santa
00:13
Nadir Show
Рет қаралды 35 МЛН
Players vs Pitch 🤯
00:26
LE FOOT EN VIDÉO
Рет қаралды 137 МЛН
L37. Morris Traversal | Preorder | Inorder | C++ | Java
23:50
take U forward
Рет қаралды 266 М.
I Coded Minecraft’s Hardest Difficulty
16:36
McMakistein
Рет қаралды 80 М.
The Best Way to Learn Linux
9:45
Mental Outlaw
Рет қаралды 130 М.
Dr Gabor Mate answers question about October 7th during conference
12:53
Middle East Eye
Рет қаралды 439 М.
Why is Python 150X slower than C?
10:45
Mehul - Codedamn
Рет қаралды 15 М.
How I Mastered Data Structures and Algorithms
10:45
Ashish Pratap Singh
Рет қаралды 260 М.
Увеличили моцареллу для @Lorenzo.bagnati
00:48
Кушать Хочу
Рет қаралды 8 МЛН