#include <iostream>
#include <vector>
#include <climits>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
private:
int inorderSearch(vector<int> &inorder, int inStrt, int inEnd, int target) {
for(int i = inStrt ; i <= inEnd ; i++ ) {
if(inorder[i] == target)
return i ;
}
}
TreeNode *buildTreeUtil(vector<int> &postorder, vector<int> &inorder, int inStrt, int inEnd, int& postIndex) {
if(inStrt > inEnd)
return NULL ;
TreeNode *root = new TreeNode(postorder[postIndex--]) ;
if(inStrt == inEnd)
return root ;
int inIndex = inorderSearch(inorder, inStrt, inEnd, root -> val ) ;
root -> left = buildTreeUtil(postorder, inorder, inStrt, inIndex - 1, postIndex) ;
root -> right = buildTreeUtil(postorder, inorder, inIndex + 1 , inEnd, postIndex) ;
return root ;
}
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
int inStrt = 0 ;
int inEnd = postorder.size() - 1 ;
int postIndex = inEnd ;
TreeNode *root = NULL ;
root = buildTreeUtil(postorder, inorder, inStrt, inEnd, postIndex) ;
return root ;
}
void Inorder(TreeNode *root) {
if(!root)
return ;
Inorder(root -> left) ;
cout << root -> val << " " ;
Inorder(root -> right) ;
}
void Postorder(TreeNode *root) {
if(!root)
return ;
Postorder(root -> left) ;
Postorder(root -> right) ;
cout << root -> val << " " ;
}
void Preorder(TreeNode *root) {
if(!root)
return ;
cout << root -> val << " " ;
Preorder(root -> left) ;
Preorder(root -> right) ;
}
void DFS(struct TreeNode *root , vector<int> v, int& minHeight) ;
};
void Solution :: DFS (struct TreeNode *root , vector<int> v, int& minHeight) {
if(!root)
return ;
v.push_back(root -> val) ;
if(!(root -> left) && !(root -> right) ) {
if(minHeight > v.size())
minHeight = v.size() ;
//for(int i = 0 ; i < v.size() ; i++)
// cout << v[i] << " " ;
//cout << endl ;
}
DFS(root -> left , v, minHeight) ;
DFS(root -> right , v, minHeight) ;
v.pop_back() ;
}
int main() {
Solution s ;
// vector<int> v ;
// int minHeight = INT_MAX ;
vector<int> preorder , inorder , postorder ;
// preorder.push_back(1);preorder.push_back(2);preorder.push_back(3);preorder.push_back(7);preorder.push_back(8);preorder.push_back(4);preorder.push_back(5);preorder.push_back(6);
// inorder.push_back(3);inorder.push_back(2);inorder.push_back(8);inorder.push_back(7);inorder.push_back(1);inorder.push_back(5);inorder.push_back(6);inorder.push_back(4);
inorder.push_back(1);inorder.push_back(2);inorder.push_back(3);inorder.push_back(4);inorder.push_back(5);
postorder.push_back(1);postorder.push_back(2);postorder.push_back(5);postorder.push_back(4);postorder.push_back(3);
TreeNode *root = NULL ;
// root = s . buildTree(preorder, inorder) ;
root = s . buildTree(inorder, postorder) ;
s . Postorder(root);
// cout << endl << "Paths :\n" ;
// s.DFS(root , v , minHeight) ;
// cout << minHeight ;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2xpbWl0cz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAKICBzdHJ1Y3QgVHJlZU5vZGUgewogICAgICBpbnQgdmFsOwogICAgICBUcmVlTm9kZSAqbGVmdDsKICAgICAgVHJlZU5vZGUgKnJpZ2h0OwogICAgICBUcmVlTm9kZShpbnQgeCkgOiB2YWwoeCksIGxlZnQoTlVMTCksIHJpZ2h0KE5VTEwpIHt9CiAgfTsKCiAKY2xhc3MgU29sdXRpb24gewpwcml2YXRlOgogICAgaW50IGlub3JkZXJTZWFyY2godmVjdG9yPGludD4gJmlub3JkZXIsIGludCBpblN0cnQsIGludCBpbkVuZCwgaW50IHRhcmdldCkgewogICAgICAgIGZvcihpbnQgaSA9IGluU3RydCA7IGkgPD0gaW5FbmQgOyBpKysgKSB7CiAgICAgICAgICAgIGlmKGlub3JkZXJbaV0gPT0gdGFyZ2V0KQogICAgICAgICAgICAgICByZXR1cm4gaSA7CiAgICAgICAgfQogICAgfQogICAgCiAgICBUcmVlTm9kZSAqYnVpbGRUcmVlVXRpbCh2ZWN0b3I8aW50PiAmcG9zdG9yZGVyLCB2ZWN0b3I8aW50PiAmaW5vcmRlciwgaW50IGluU3RydCwgaW50IGluRW5kLCBpbnQmIHBvc3RJbmRleCkgewogICAgICAgIGlmKGluU3RydCA+IGluRW5kKQogICAgICAgICAgIHJldHVybiBOVUxMIDsKICAgICAgICBUcmVlTm9kZSAqcm9vdCA9IG5ldyBUcmVlTm9kZShwb3N0b3JkZXJbcG9zdEluZGV4LS1dKSA7CiAgICAgICAgaWYoaW5TdHJ0ID09IGluRW5kKQogICAgICAgICAgIHJldHVybiByb290IDsKICAgICAgICBpbnQgaW5JbmRleCA9IGlub3JkZXJTZWFyY2goaW5vcmRlciwgaW5TdHJ0LCBpbkVuZCwgcm9vdCAtPiB2YWwgKSA7CiAgICAgICAgcm9vdCAtPiBsZWZ0ID0gYnVpbGRUcmVlVXRpbChwb3N0b3JkZXIsIGlub3JkZXIsIGluU3RydCwgaW5JbmRleCAtIDEsIHBvc3RJbmRleCkgOwogICAgICAgIHJvb3QgLT4gcmlnaHQgPSBidWlsZFRyZWVVdGlsKHBvc3RvcmRlciwgaW5vcmRlciwgaW5JbmRleCArIDEgLCBpbkVuZCwgcG9zdEluZGV4KSA7CiAgICAgICAgcmV0dXJuIHJvb3QgOwogICAgfQogICAgCnB1YmxpYzoKICAgIFRyZWVOb2RlICpidWlsZFRyZWUodmVjdG9yPGludD4gJmlub3JkZXIsIHZlY3RvcjxpbnQ+ICZwb3N0b3JkZXIpIHsKICAgICAgICBpbnQgaW5TdHJ0ID0gMCA7CiAgICAgICAgaW50IGluRW5kID0gcG9zdG9yZGVyLnNpemUoKSAtIDEgOwogICAgICAgIGludCBwb3N0SW5kZXggPSBpbkVuZCA7CiAgICAgICAgVHJlZU5vZGUgKnJvb3QgPSBOVUxMIDsKICAgICAgICByb290ID0gYnVpbGRUcmVlVXRpbChwb3N0b3JkZXIsIGlub3JkZXIsIGluU3RydCwgaW5FbmQsIHBvc3RJbmRleCkgOwogICAgICAgIHJldHVybiByb290IDsKICAgIH0KICAgIAogICAgdm9pZCBJbm9yZGVyKFRyZWVOb2RlICpyb290KSB7CiAgICAJaWYoIXJvb3QpCiAgICAJICAgcmV0dXJuIDsKICAgIAlJbm9yZGVyKHJvb3QgLT4gbGVmdCkgOwogICAgCWNvdXQgPDwgcm9vdCAtPiB2YWwgPDwgIiAiIDsKICAgIAlJbm9yZGVyKHJvb3QgLT4gcmlnaHQpIDsKICAgIH0KICAgIAogICAgdm9pZCBQb3N0b3JkZXIoVHJlZU5vZGUgKnJvb3QpIHsKICAgIAlpZighcm9vdCkKICAgIAkgICByZXR1cm4gOwogICAgCVBvc3RvcmRlcihyb290IC0+IGxlZnQpIDsKICAgIAlQb3N0b3JkZXIocm9vdCAtPiByaWdodCkgOwogICAgCWNvdXQgPDwgcm9vdCAtPiB2YWwgPDwgIiAiIDsKICAgIH0KCiAgICB2b2lkIFByZW9yZGVyKFRyZWVOb2RlICpyb290KSB7CiAgICAJaWYoIXJvb3QpCiAgICAJICAgcmV0dXJuIDsKICAgIAljb3V0IDw8IHJvb3QgLT4gdmFsIDw8ICIgIiA7CiAgICAJUHJlb3JkZXIocm9vdCAtPiBsZWZ0KSA7CiAgICAJUHJlb3JkZXIocm9vdCAtPiByaWdodCkgOwogICAgfQogICAgCiAgICB2b2lkIERGUyhzdHJ1Y3QgVHJlZU5vZGUgKnJvb3QgLCB2ZWN0b3I8aW50PiB2LCBpbnQmIG1pbkhlaWdodCkgOwogICAgCn07Cgp2b2lkIFNvbHV0aW9uIDo6IERGUyAoc3RydWN0IFRyZWVOb2RlICpyb290ICwgdmVjdG9yPGludD4gdiwgaW50JiBtaW5IZWlnaHQpIHsKCWlmKCFyb290KQoJICAgcmV0dXJuIDsKCXYucHVzaF9iYWNrKHJvb3QgLT4gdmFsKSA7CglpZighKHJvb3QgLT4gbGVmdCkgJiYgIShyb290IC0+IHJpZ2h0KSApIHsKCQkKCQlpZihtaW5IZWlnaHQgPiB2LnNpemUoKSkKCQkgICBtaW5IZWlnaHQgPSB2LnNpemUoKSA7CgkJLy9mb3IoaW50IGkgPSAwIDsgaSA8IHYuc2l6ZSgpIDsgaSsrKQoJCSAgLy8gY291dCA8PCB2W2ldIDw8ICIgIiA7CgkJLy9jb3V0IDw8IGVuZGwgOwoJfQoJREZTKHJvb3QgLT4gbGVmdCAsIHYsIG1pbkhlaWdodCkgOwoJREZTKHJvb3QgLT4gcmlnaHQgLCB2LCBtaW5IZWlnaHQpIDsKCXYucG9wX2JhY2soKSA7Cn0KCmludCBtYWluKCkgewoJU29sdXRpb24gcyA7Ci8vCXZlY3RvcjxpbnQ+IHYgOwovLwlpbnQgbWluSGVpZ2h0ID0gSU5UX01BWCA7Cgl2ZWN0b3I8aW50PiBwcmVvcmRlciAsIGlub3JkZXIgLCBwb3N0b3JkZXIgOwovLyAgcHJlb3JkZXIucHVzaF9iYWNrKDEpO3ByZW9yZGVyLnB1c2hfYmFjaygyKTtwcmVvcmRlci5wdXNoX2JhY2soMyk7cHJlb3JkZXIucHVzaF9iYWNrKDcpO3ByZW9yZGVyLnB1c2hfYmFjayg4KTtwcmVvcmRlci5wdXNoX2JhY2soNCk7cHJlb3JkZXIucHVzaF9iYWNrKDUpO3ByZW9yZGVyLnB1c2hfYmFjayg2KTsKLy8gIGlub3JkZXIucHVzaF9iYWNrKDMpO2lub3JkZXIucHVzaF9iYWNrKDIpO2lub3JkZXIucHVzaF9iYWNrKDgpO2lub3JkZXIucHVzaF9iYWNrKDcpO2lub3JkZXIucHVzaF9iYWNrKDEpO2lub3JkZXIucHVzaF9iYWNrKDUpO2lub3JkZXIucHVzaF9iYWNrKDYpO2lub3JkZXIucHVzaF9iYWNrKDQpOwogICAgaW5vcmRlci5wdXNoX2JhY2soMSk7aW5vcmRlci5wdXNoX2JhY2soMik7aW5vcmRlci5wdXNoX2JhY2soMyk7aW5vcmRlci5wdXNoX2JhY2soNCk7aW5vcmRlci5wdXNoX2JhY2soNSk7CiAgICBwb3N0b3JkZXIucHVzaF9iYWNrKDEpO3Bvc3RvcmRlci5wdXNoX2JhY2soMik7cG9zdG9yZGVyLnB1c2hfYmFjayg1KTtwb3N0b3JkZXIucHVzaF9iYWNrKDQpO3Bvc3RvcmRlci5wdXNoX2JhY2soMyk7CiAgICBUcmVlTm9kZSAqcm9vdCA9IE5VTEwgOwovLyAgcm9vdCA9IHMgLiBidWlsZFRyZWUocHJlb3JkZXIsIGlub3JkZXIpIDsKICAgIHJvb3QgPSBzIC4gYnVpbGRUcmVlKGlub3JkZXIsIHBvc3RvcmRlcikgOwogICAgcyAuIFBvc3RvcmRlcihyb290KTsKLy8gICAgY291dCA8PCBlbmRsIDw8ICJQYXRocyA6XG4iIDsKLy8gICAgcy5ERlMocm9vdCAsIHYgLCBtaW5IZWlnaHQpIDsgCi8vICAgIGNvdXQgPDwgbWluSGVpZ2h0IDsKCXJldHVybiAwOwp9