construct binary tree from preorder and postorder traversal leetcode | leetcode 889 | dfs

preview_player
Показать описание
Problem Link - construct binary tree from preorder and postorder traversal leetcode | leetcode 889 | dfs

#Tree #DFS #Recursive #Coding #Programming #Interview #Practice #Leetcode #Problem_889 #Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal #Algorithm #Java #Preparation
Рекомендации по теме
Комментарии
Автор

hello sir i used len = idx - preStart +1 but it is giving wrong ans intead of preStart if we use postStart it gives correct ans.can you please tell the reason behind this?

Iamnoone
Автор

working java code:
class Solution {
public TreeNode construct(int[] pre, int preStart, int preEnd, int[] post,
int postStart, int postEnd, HashMap<Integer, Integer> map) {
if(preStart > preEnd) return null;
TreeNode root = new TreeNode(pre[preStart]);
if(preStart == preEnd) return root; // when there is only one node in left or right subtree
int postIdx = postStart;

postIdx = map.get(pre[preStart+1]); // preStart+1 bcz we can determine left and right subtree nodes by checking the pos of next node in preOrder in postorder

int len = postIdx-postStart +1;
root.left = construct(pre, preStart+1, preStart+len, post, postStart, postIdx, map);
root.right = construct(pre, preStart+len+1, preEnd, post, postIdx+1, postEnd-1, map);
return root;
}

public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {
HashMap<Integer, Integer> map = new HashMap<>();
int n = postorder.length;
for(int i = 0; i < n; i++) {
map.put(postorder[i], i); // indx, value
}

return construct(preorder, 0, n-1, postorder, 0, n-1, map);
}
}

anuragjaiswal
Автор

Thank you, it's amazing. I don't know why there are so many dislikes

sarthakgaba
Автор

working solution

unordered_map<int, int> mp;

TreeNode* solve(vector<int>& preorder, vector<int>& postorder, int preS, int preE, int postS, int postE){
if(preS>preE)
return NULL;
TreeNode* root = new TreeNode(preorder[preS]);

if(preS==preE)
return root;

int idx = mp[preorder[preS+1]];
idx++;
int numE = idx-postS+1;
root->left = solve(preorder, postorder, preS+1, preS+numE, postS, idx);
root->right = solve(preorder, postorder, preS+numE+1, preE, idx+1, postE-1);
return root;
}
TreeNode* preorder, vector<int>& postorder) {
int n=preorder.size();

for(int i=0; i<n; ++i){
mp[postorder[i]]=i;
}

return solve(preorder, postorder, 0, n-1, 0, n-1);
}

priyankaram
Автор

Why is it giving me runtime error?

TreeNode* preorder, vector<int>& postorder) {
unordered_map<int, int> index; //of postorder
for(int i=0;i<postorder.size();++i){
index[postorder[i]]=i;
}
return buildTreePrePost(preorder, 0, preorder.size()-1, postorder, 0, postorder.size()-1, index);
}
TreeNode* buildTreePrePost(vector<int>& preorder, int preS, int preE, vector<int>& postorder, int postS, int postE, unordered_map<int, int>& index){


if(preS>preE || postS>postE){
return NULL;
}
TreeNode* root=new TreeNode(preorder[preS]);
int postRoot=index[preS+1];
int numsLeft=postRoot-postS+1;
root->left=buildTreePrePost(preorder, preS+1, preS+numsLeft, postorder, postS, postRoot, index);
root->right=buildTreePrePost(preorder, preS+numsLeft+1, preE, postorder, postRoot+1, postE-1, index);
return root;
}

JohnWick-khow
Автор

Can you answer me one thing is it okay for someone if he is not able to solve some questions like i got stuck in this and then lookup for solution then solve?

anmolojha